mysql innodbindexstats_innodb_index_stats

该表提供查询索引相关的统计信息

表结构定义

CREATE TABLE `innodb_index_stats` (

`database_name` varchar(64) COLLATE utf8_bin NOT NULL,

`table_name` varchar(64) COLLATE utf8_bin NOT NULL,

`index_name` varchar(64) COLLATE utf8_bin NOT NULL,

`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

`stat_name` varchar(64) COLLATE utf8_bin NOT NULL,

`stat_value` bigint(20) unsigned NOT NULL,

`sample_size` bigint(20) unsigned DEFAULT NULL,

`stat_description` varchar(1024) COLLATE utf8_bin NOT NULL,

PRIMARY KEY (`database_name`,`table_name`,`index_name`,`stat_name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0;

表字段含义

database_name:数据库名称

table_name:表名、分区表名、子分区表名称

index_name:索引名称

last_update:表示InnoDB上次更新此统计信息行的时间戳

stat_name:统计信息名称,其对应的统计信息值保存在stat_value列

stat_value:保存统计信息名称stat_name列对应的统计信息值

sample_size:stat_value列中提供的统计信息估计值的采样页数

stat_description:统计信息名称stat_name列中指定的统计信息的说明信息

表记录内容示例

root@localhost : mysql 08:01:34> select * from innodb_index_stats where table_name='test';

+---------------+------------+------------+---------------------+--------------+------------+-------------+-----------------------------------+

| database_name | table_name | index_name | last_update | stat_name | stat_value | sample_size | stat_description |

+---------------+------------+------------+---------------------+--------------+------------+-------------+-----------------------------------+

| test | test | PRIMARY | 2018-05-24 20:00:50 | n_diff_pfx01 | 5 | 1 | a |

| test | test | PRIMARY | 2018-05-24 20:00:50 | n_diff_pfx02 | 6 | 1 | a,b |

| test | test | PRIMARY | 2018-05-24 20:00:50 | n_leaf_pages | 1 | NULL | Number of leaf pages in the index |

| test | test | PRIMARY | 2018-05-24 20:00:50 | size | 1 | NULL | Number of pages in the index |

| test | test | i1 | 2018-05-24 20:00:50 | n_diff_pfx01 | 5 | 1 | c |

| test | test | i1 | 2018-05-24 20:00:50 | n_diff_pfx02 | 5 | 1 | c,d |

| test | test | i1 | 2018-05-24 20:00:50 | n_diff_pfx03 | 6 | 1 | c,d,a |

| test | test | i1 | 2018-05-24 20:00:50 | n_diff_pfx04 | 6 | 1 | c,d,a,b |

| test | test | i1 | 2018-05-24 20:00:50 | n_leaf_pages | 1 | NULL | Number of leaf pages in the index |

| test | test | i1 | 2018-05-24 20:00:50 | size | 1 | NULL | Number of pages in the index |

| test | test | i2uniq | 2018-05-24 20:00:50 | n_diff_pfx01 | 6 | 1 | e |

| test | test | i2uniq | 2018-05-24 20:00:50 | n_diff_pfx02 | 6 | 1 | e,f |

| test | test | i2uniq | 2018-05-24 20:00:50 | n_leaf_pages | 1 | NULL | Number of leaf pages in the index |

| test | test | i2uniq | 2018-05-24 20:00:50 | size | 1 | NULL | Number of pages in the index |

+---------------+------------+------------+---------------------+--------------+------------+-------------+-----------------------------------+

14 rows in set (0.00 sec)

从以上示例数据中,我们可以看到:

stat_name列一种有如下几种统计值

* size:当stat_name为size值时,stat_value列值表示索引中的总页数量

* n_leaf_pages:当stat_name为n_leaf_pages值时,stat_value列值显示索引叶子页的数量

* n_diff_pfxNN:NN代表数字(例如:01,02等),当stat_name为n_diff_pfxNN时,stat_value列值显示索引的first column(即索引的最前索引列,从索引定义顺序的第一个列开始)列的唯一值数量,例如:当NN为01时,stat_value列值就表示索引的第一个列的唯一值数量,当NN为02时,stat_value列值就表示索引的第一和第二个列的组合唯一值数量,以此类推。此外,在stat_name = n_diff_pfxNN的情况下,stat_description列显示一个以逗号分隔的计算索引统计信息列的列表

从index_name为PRIMARY数据行的stat_description列的描述信息"a,b"中,我们可以看出 ,主键索引的统计信息列只包括创建主键索引时显式指定的列

从index_name为i2uniq数据行的stat_description列的描述信息"e,f"中,我们可以看出 ,唯一索引的统计信息列只包括创建唯一索引时显式指定的列

从index_name为i1数据行的stat_description列的描述信息 "c,d,a,b"中,我们可以看出,普通索引(非唯一的辅助索引)的统计信息列实际上除了定义的索引列之外,还包含了主键列。即对于非唯一索引在该表中记录的统计信息,InnoDB会附加主键列

注意:MySQL 5.7中系统变量innodb_stats_persistent_sample_pages定义的持久化统计信息采样页为20,这里示例中的sample_size列值为1是因为表中数据量太小,在一个页中已经足够存放,所以实际采样也只使用了1个页,如果数据量够多,则这里显示的值就会为innodb_stats_persistent_sample_pages系统变量指定的值

PS:我们可以使用该表中的索引信息页数结合系统变量innodb_page_size的值来计算索引的数据大小,如下

root@localhost : mysql 08:31:14> SELECT SUM(stat_value) pages, index_name, SUM(stat_value)*@@innodb_page_size size FROM mysql.innodb_index_stats WHERE table_name='dept_emp' AND stat_name = 'size' GROUP BY index_name;

+-------+------------+----------+

| pages | index_name | size |

+-------+------------+----------+

| 737 | PRIMARY | 12075008 |

| 353 | dept_no | 5783552 |

| 353 | emp_no | 5783552 |

+-------+------------+----------+

3 rows in set (0.01 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值