背景
在QQ群里,一位朋友问了如下的问题:
问题是:只查询一个information_schema.tables;表,为啥会有几百个Opening tables?
原因:此操作会触发表统计信息的收集。关于information_schema中表的查询都要去真正的表查看,所以慢。
MySQL如何收集统计信息?
Analyze table收集表和索引统计信息,适用于MyISAM和InnoDB;
对于innodb表,还可以使用以下选项:
1 表第一次打开的时候
2 表修改的行超过1/16或者20亿条
./row/row0mysql.c:row_update_statistics_if_needed
3 执行show index/table或者查询information_schema.tables/statistics表时
在访问以下表时,innodb表的统计信息可自动收集
information_schema.TABLES
information_schema.STATISTICS
information_schema.PARTITIONS
information_schema.KEY_COLUMN_USAGE
inf