mysql5.6对统计信息进行了改善,使得使用innodb存储引擎的数据表的统计信息可以永久(persistent)管理。从5.6开始,在mysql数据库的innodb_index_stats表和innodb_table_stats表中也可以访问索引。
root@localhost:mysql3316.sock 09:06:19 [mysql]>show tables like "%_stats"; +---------------------------+ | Tables_in_mysql (%_stats) | +---------------------------+ | innodb_index_stats | | innodb_table_stats | +---------------------------+
在mysql5.6创建表时,可以设置stats_persistent选项来控制是否保存统计信息
(1)stats_persistent=0 #采用mysql5.6以前方式管理表的统计信息,不保存于mysql数据库的innodb_index_stats和innodb_table_stats。
root@localhost:mysql3316.sock 09:06:34 [mysql]>create table test.zhangshuo(id int primary key,name varchar(20)) stats_persistent=0; Query OK, 0 rows affected (0.62 sec)
(2)stats_persistent=1 #将表统计信息保存到mysql数据库的innodb_index_stats和innodb_table_stats。
root@localhost:mysql3316.sock 09:13:14 [mysql]>create table test.zs(id int primary key,name varchar(20)) stats_persistent=1; Query OK, 0 rows affected (0.33 sec)
(3)访问mysql库中的innodb_table_stats表统计信息,可以看到只能访问到zs数据表(采用stats_persistent=1选项创建)
root@localhost:mysql3316.sock 09:24:46 [mysql]>select * from innodb_table_stats where table_name in ('zhangshuo','zs'); +---------------+------------+---------------------+--------+----------------------+--------------------------+ | database_name | table_name | last_update | n_rows | clustered_index_size | sum_of_other_index_sizes | +---------------+------------+---------------------+--------+----------------------+--------------------------+ | test | zs | 2016-08-03 09:16:01 | 0 | 1 | 0 | +---------------+------------+---------------------+--------+----------------------+--------------------------+ 1 row in set (0.00 sec)
(4)当然也可以使用alter table命令将表统计信息改为永久存储状态(stats_persistent=1)