分页时,我们需要查总条数:
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()语句的关键。