最近项目中优化sql,到底使用哪个count(*)、count(常量)、count(主健)、count(字段)。其实分析会发现在innodb、myisam模式下结果是不一样的。
1、myisam模式下默认就保存了总记录数,所以myisam查询是直接出结果大概也就1ms出结果
2、innodb模式下, count(字段)->count(主键id)->count(1)≈count(*) 最快的就是count(常量)与count(*) 。差别并不太大。
当然上面2个均是查询没带where条件的情况下,不过带上条件count(常量)与count(*)两者情况也差不多,至于有的博客说count(*)最快,有的博客说count(1)更快,感觉都与环境与条件相关比如带不带查询条件,表有没有主健,索引等等因素。
总结:
建议使用count(*),阿里云开发手册SQL第一条规范: