原文链接: 最近研究MYSQL时突然发现count(*) 的问题, 网络上查询时发现该文章.
作者:飘易
来源:飘易
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
执行效率: MYISAM > InnoDB ( secondary key(单独存放) > primary key(与 data 保存) )
InnoDB引擎并不适合使用select count(*)查询总行数。
MYISAM引擎存储记录总行数,select count(*)时直接读取
MYSQL bug 分析: 关于 secondary key(单独存放) > primary key(与 data 保存)
: select count(*) from test" in the example now uses the secondary key.
在MYSQL bug处理中存在该问题, 由于使用primary key 的查询效率低于 secondary key ,
所以 Innodb引擎默认优化器将原来的 primary key 扫描, 后期修改为 secondary key 扫描.
MYSQL 默认优化器选择: possible_key , index , name
explain select count(*) from table ;
如只有primary key 则选择 使用pk
如有primary key 和 secondary key ,则使用 secondary key .