MySQL 5.7下InnoDB对COUNT(*)的优化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 5.7下InnoDB对COUNT(*)的优化相关的知识,希望对你有一定的参考价值。

mysql 5.7 COUNT()会选择聚集索引,进行一次内部handler函数调用,即可快速获得该表总数

执行计划显示:Extra:Select tables optimized away

5.7以前的版本中,COUNT()请求通常是:扫描普通索引来获得这个总数。
6.执行计划显示: Extra:Using index

如果聚集索引较大(或者说表数据量较大),没有完全加载到buffer pool中的话,MySQL 5.7的查询方式有可能反而会更慢,还不如用原先的方式(MySQL 5.6)
解决办法:强制走普通索引,不过还需要加上WHERE条件,否则还是不行
select count() from stock force index(idx_stock) where id >0;
extra:using where,using index

以上是关于MySQL 5.7下InnoDB对COUNT(*)的优化的主要内容,如果未能解决你的问题,请参考以下文章

mysql-5.7中innodb_buffer_pool页面淘汰算法

mysql-5.7 innodb change buffer 详解

mysql5.5 5.6 5.7新特性

MySQL 5.7 TDE

MySQL 5.7 优化InnoDB配置

mysql-5.7 show engine innodb status 详解