索引的统计信息:
1.memory引擎根本不存储索引统计信息
2.MyISAM表存储引擎存放在磁盘中,analyze table需要全索引扫描来计算基数,整个过程需要锁表
3.InnoDB有持久化统计信息和非持久化统计信息。
3.1持久化统计信息:重启MySQL时,统计信息不丢失
3.2非持久化统计信息不在磁盘中存储统计信息,而是通过随机的索引访问进行评估并放在内存中
innodb_stats_samples_pages
设置样本页的数量
Show index from tab1查来索引的基数
或information_schema.statistics
参考资料:
https://www.cnblogs.com/ziroro/p/9948103.html
持久统计信息
- 当 innodb_stats_persistent = ON,默认开启(表示开启永久统计信息功能,用不用由表来决定)
- 创建表的时候指定 STATS_PERSISTENT=1
非持久统计信息
- 默认开启
手动收集统计信息
analyze table tbl_name
如果发现执行计划内的统计信息有问题,可以手动收集,如果还是手动收集的不准,可以调整下参数采样参数。
innodb_stats_persistent = ON。调整 innodb_stats_persistent_sample_pages参数
innodb_stats_persistent = OFF。调整 innodb_stats_transient_sample_pages 参数