这个系列的文章主要是为了能够让自己了解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. xml 解析的四种方式

    =========================================xml文件<?xml version="1.0" encoding="GB2312 ...

  2. 第七课第一节,T语言流程语句( 版本5.0)

    流程语句 if语句 用if语句可以构成分支结构.它根据给定的条件进行判断,以决定执行某个分支程序段.TC综合开发工具的if语句有三种基本形式,并且每个语句的结尾都要有一个end (注:关键字,if,e ...

  3. android之ActionBar

    最近忙着做项目了,很久么来博客园看看了.最近项目中用到了actionbar,那就依我个人之建,来跟大家谈谈吧. 首先最重的是看你自己所见的项目的最小Api是为11,(在设置Minsdkversion最 ...

  4. std::ostringstream输出流详解

    一.简单介绍 ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中.ostringstream类通常用于执行C风格的串流的输出操作,格式化字符串,避免申请大量的缓 ...

  5. 主题:Android、iPhone和Java三个平台一致的加密工具

    先前一直在做安卓,最近要开发iPhone客户端,这其中遇到的最让人纠结的要属Java.Android和iPhone三个平台加解密不一致的问题.因为手机端后台通常是用JAVA开发的Web Service ...

  6. 【C】 04 - 表达式和语句

    程序的生命力体现在它千变万化的行为,而再复杂的系统都是由最基本的语句组成的.C语句形式简单自由,但功能强大.从规范的角度学习C语法,一切显得简单而透彻,无需困扰于各种奇怪的语法. 1. 表达式(exp ...

  7. linux, configure --prefix=/有什么用

    作用就是指定安装路径不指定prefix,则可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc.其它的资源文件放在 ...

  8. Android学习笔记(四)

    一个应用程序是有很多活动构成的,使用Intent在活动间移动. Intent分为显式和隐式两种: 1.显示Intent: 新建一个布局文件,命名为second_layout.xml,代码如下 < ...

  9. jmf找不到摄像头设备解决办法

    1.安装的jdk需要时32位的. 2.在jmfregistry中注册捕获设备. 3.jar文件必须和配置文件在一起.可以新建User library把jar文件添加进去.

  10. angular.js ngbind nghtml ngTemplate

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...