这个系列的文章主要是为了能够让自己了解MySQL5.7的一些系统表,统一做一下备注和使用,也希望分享出来让大家能够有一点点的受益。
1:KEY_COLUMN_USAGE
按照官方的解释,这个表描述的是关于有约束的列。也就是没有约束的列都不会显示出来,按照整库查了一下,我里面有五张表,结果这个库记录的只有一条信息。因为只有这个列有约束,其他几张表都是测试玩的,并没有什么约束。
我现在创建两张表主键外键关联关系,然后查一下记录:
看一下就很是明朗了有没有,test1的ID只是主键,后面的关联就会显示NULL,TEST2的外键就很能说明问题了,关联的那个表的那个键,自己是外键,以及在那个schema等,记住有一点就是ORDINAL_POSITION这个指的不是创建表时候列的顺序,而是这个约束的排序。信息还是很全面的。很多时候我们就可以根据这个直接去查询表的关联关系,而不需要在看表结构等信息。这个还是很不错的。查看某个表的关联关系很简单,根据TABLE_NAME列进行筛选就可以了。
 
2:INNODB_SYS_COLUMNS 和INNODB_SYS_TABLES
INNODB_SYS_COLUMNS 这个系统表存放的是INNODB的元数据, 他是依赖于SYS_COLUMNS这个统计表而存在的。
这两张表可以做个联合查询,就一块说了把,查看的就是TEST1表的所有列。用着还算是可以的。
select A.*, B.NAME from INNODB_SYS_TABLES AS A,INNODB_SYS_COLUMNS AS B WHERE A.TABLE_ID=B.TABLE_ID AND A.NAME LIKE '%TEST1%';
也可以按照下面的进行查询:
select A.name, B.* from INNODB_SYS_TABLES AS A,INNODB_SYS_COLUMNS AS B WHERE A.TABLE_ID=B.TABLE_ID AND A.NAME LIKE '%TEST1%';
个人感觉还是通过第二种查询起来还是比较好的。因为看出来直接看到表的列以及长度还是很不错的不是吗。
指的看的一点是INNODB_SYS_COLUMNS 的MTYPE和PRTYPE这两个列
MTYPE的对应关系看一下:
1 = VARCHAR, 2 = CHAR, 3 = FIXBINARY, 4 = BINARY, 5 = BLOB, 6 = INT, 7 = SYS_CHILD, 8 = SYS, 9 = FLOAT, 10 = DOUBLE, 11 = DECIMAL, 12 = VARMYSQL, 13 = MYSQL, 14 = GEOMETRY.
PRTYPE这个列是一个二进制的编码,表示了INNODB的精确数据类型,字符集编码和能不能为NULL.
INNODB_SYS_TABLES 这张表依赖的是SYS_TABLES数据字典中拉取出来的。此表提供了有关表格的格式和存储特性,包括行格式,压缩页面大小位级别的信息(如适用)。下面看一下官网给的解释:
Column name Description
TABLE_ID 所有的表自增排序的一个序号,每个表都是唯一的
NAME 表名字
FLAG This value provides bit level information about table format and storage characteristics including row format, compressed page size (if applicable), and whether or not the DATA DIRECTORY clause was used with CREATE TABLE or ALTER TABLE.
N_COLS The number of columns in the table. The number reported includes three hidden columns that are created by InnoDB (DB_ROW_ID,DB_TRX_ID, and DB_ROLL_PTR). The number reported also includes generated virtual columns, if present.
SPACE An identifier for the tablespace where the table resides. 0 means the InnoDB system tablespace. Any other number represents either a file-per-table tablespace or a general tablespace. This identifier stays the same after a TRUNCATE TABLE statement. For file-per-table tablespaces, this identifier is unique for tables across all databases in the instance.
FILE_FORMAT The table's file format (Antelope or Barracuda).
ROW_FORMAT The table's row format (Compact, Redundant, Dynamic, or Compressed).
ZIP_PAGE_SIZE The zip page size. Only applies to tables that use the Compressed row format.
SPACE_TYPE The type of tablespace to which the table belongs. Possible values include System (for the InnoDB system tablespace), General (for InnoDBgeneral tablespaces created using CREATE TABLESPACE, and Single (for InnoDB file-per-table tablespaces). Tables assigned to the system tablespace using the CREATE TABLE or ALTER TABLE TABLESPACE=innodb_system clause have a General SPACE_TYPE. TheSPACE_TYPE column was added in MySQL 5.7.6 with the introduction of InnoDB general tablespaces. For more information, see CREATE TABLESPACE.
通过这两张表可以查看表的基本信息和表对应的列的信息。还是比较方便的。
 
3:OPTIMIZER_TRACE
这个表就比较6了,提供的是优化跟踪功能产生的信息。不过这个功能默认是不开启,我们要设置开启才能看得到,下面看一下怎么开启:
# Turn tracing on (it's off by default): SET optimizer_trace="enabled=on"; SELECT ...; # your query here SELECT * FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; # possibly more queries... # When done with tracing, disable it: SET optimizer_trace="enabled=off";
上面是官网给的例子我们不要太在意,我们看一下自己的例子:
SET GLOBAL optimizer_trace="enabled=on";
做两三次查询:
然后再去查询就会有记录了,但是千万记住,为什么默认是是关闭的呢。因为这个东西很小奥性能,你想一下,你每做一次查询,查询的所有信息都要被记录下来。这不是非常的消耗性能吗。对服务器来说是一种负担,所以说一般情况下不要开启这个功能。只有当我们需要查询性能问题的时候才能开一下。另外,贴一下查询结果,太长了,截取一段就好了。
 
以后我们会详细看一下跟踪这个功能,因为数据库的优化的话必须是要有充足的信息的,所以说我们一定要学号跟踪,我打算下周花一周时间把跟踪学习一下,然后给大家分享一下。明天在看几个比较简单的系统表。下周好好学习一下跟踪。
 

information_schema系列四(跟踪,列约束,表和列)的更多相关文章

  1. SQLLoader4(数据文件中的列与表中列不一致情况-filler)

    A.数据文件中字段个数少于表中列字段个数,但数据文件中缺少的列,在表定义中可以为空.----- 这种情况是比较简单的,只需要将数据文件中数据对应的列的名字写到控制文件中即可.因为SQL*Loader是 ...

  2. gridiew列求和,表的列求和,表的记录数,时间段查询

    下面求的是gridview中第5列的值,并在lable1中显示 protected void Page_Load(object sender, EventArgs e)    {        int ...

  3. information_schema系列六(索引,表空间,权限,约束相关表)

    information_schema系列六(索引,表空间,权限,约束相关表) 1: STATISTICS 这个表提供的是关于表的索引信息:   INFORMATION_SCHEMA Name SHOW ...

  4. Oracle表、列、约束的操作

    获得有关表的信息 可以直接DESCRIBE DESC[RIBE] table_name; 可以通过数据字典 SELECT * FROM user_tables WHERE table_name =xx ...

  5. BootStrap 智能表单系列 四 表单布局介绍

    表单的布局分为自动布局和自定义布局两种: 自动布局就是根据配置项中第二级配置项中数组的长度来自动使用不同的bootstrap栅格,通过设置autoLayout为true可以实现自动布局 自动以布局就是 ...

  6. RX系列四 | RxAndroid | 加载图片 | 提交表单

    RX系列四 | RxAndroid | 加载图片 | 提交表单 说实话,学RxJava就是为了我们在Android中运用的更加顺手一点,也就是RxAndroid,我们还是先一步步来,学会怎么去用的比较 ...

  7. [MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率

    首先,介绍下关于InnoDB引擎存储格式的几个要点:1.InnoDB可以选择使用共享表空间或者是独立表空间方式,建议使用独立表空间,便于管理.维护.启用 innodb_file_per_table 选 ...

  8. flask系列四之SQLAlchemy(二)表关系

    一.SQLAlchemy外键约束 1.创建外键约束表结构 目标:建立两个表“用户表(user)”和“问题表( question)”,其中问题表中的作者id是是用户表的id即外键的关系.(一个用户可以有 ...

  9. information_schema系列三(文件,变量)

    这个系列的文章主要是为了能够让自己了解MySQL5.7的一些系统表,统一做一下备注和使用,也希望分享出来让大家能够有一点点的受益. 1:FILES 这张表提供了有关在MySQL的表空间中的数据存储的文 ...

随机推荐

  1. 【转】精心推荐几款超实用的 CSS 开发工具

    原文转自:http://www.html5cn.org/article-5741-1.html 摘要: 当你开发一个网站或 Web 应用程序的时候,有合适的工具,绝对可以帮助您节省大量的时间.在这篇文 ...

  2. Lua协程

    协作例程 1.同一时刻仅一个例程在运行 2.执行权让渡和恢复[栈]

  3. samba 配置

    sudo apt-get install samba sudo apt-get install kdenetwork-filesharing vi /etc/samba/smb.conf [Share ...

  4. (实用篇)php数组查找函数in_array()、array_search()、array_key_exists()使用

    php在数组中查找指定值是否存在的方法有很多,记得很久以前我一直都是傻傻的用foreach循环来查找的,下面我主要分享一下用php内置的三个数组函数来查找指定值是否存在于数组中,这三个数组分别是 in ...

  5. 将JZ2440的调试串口换成com2

    众所周知JZ2440 V3很小巧,精致.今天单就JZ2440的串口来讨论一些问题.我们在用串口进行调试的时候,需要用JZ2440自带的一根USB线连接电脑USB口和开发板的USB-com1口.先来看一 ...

  6. HTML5播放器

    seweise palyer http://www.whatled.com/m/?post=1626 https://github.com/sewise/sewise-player2 七牛云音视频支持 ...

  7. Android性能之启动时间篇

    背景介绍 Android用户也许会经常碰到以下的问题: 1)应用后台开着,手机很快没电了--应用耗电大: 2)首次/非首次启动应用,进入应用特别慢--应用启动慢: 3)应用使用过程中,越来越卡--CP ...

  8. 黄聪:PHP7.0中htmlspecialchars出错解决方案(wordpress)

    htmlspecialchars( $context, ENT_COMPAT, 'UTF-8' )

  9. NeHe OpenGL教程 第四十五课:顶点缓存

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  10. Shell脚本中执行sql语句操作mysql

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...