分页时,我们需要查总条数:
[sql] view plain copy print?
- SELECT COUNT(*) FROM tb
- WHERE CREATE_DATETIME > '1998-01-01'
然后发现,这个求总数的sql竟然花了300ms,比取分页数据的时间还长!
有人说不加WHERE条件的COUNT会非常快,因为有单独的地方存这个总数。然并卵……
把COUNT(*)换成COUNT(1),COUNT(主键),耗时都一样。虽然"*"这个字符一直饱受诟病,但现在新版本的sql都已作了优化。
反复尝试之后,发现在CREATE_DATETIME上建立索引之后,查询时间直接降到15ms!!
思考:COUNT()语句不关心列,但仍然需要按WHERE条件来检索。所以优化连接条件和WHERE条件是优化COUNT()语句的关键。
好文章
http://imysql.cn/2008_06_24_speedup_innodb_count
本文探讨了在分页查询中优化COUNT(*)性能的方法。通过在关键字段上建立索引,将查询时间从300ms降低到15ms,显著提高了效率。
4535

被折叠的 条评论
为什么被折叠?



