优化 COUNT() 查询 [ 新手入门 ]
COUNT()
可能是被大家误解最多的函数了,它有两种不同的作用,其一是统计某个列值的数量,其二是统计行数。统计列值时,要求列值是非空的,它不会统计NULL。如果确认括号中的表达式不可能为空时,实际上就是在统计行数。最简单的就是当使用 COUNT(*)
时,并不是我们所想象的那样扩展成所有的列,实际上,它会忽略所有的列而直接统计所有的行数。
我们最常见的误解也就在这儿,在括号内指定了一列却希望统计结果是行数,而且还常常误以为前者的性能会更好。但实际并非这样,如果要统计行数,直接使 用COUNT(*)
,意义清晰,且性能更好。
有时候某些业务场景并不需要完全精确的 COUNT 值,可以用近似值来代替,EXPLAIN出来的行数就是一个不错的近似值,而且执行 EXPLAIN 并不需要真正地去执行查询,所以成本非常低。通常来说,执行 COUNT()
都需要扫描大量的行才能获取到精确的数据,因此很难优化,MySQL层面还能做得也就只有覆盖索引了。如果不还能解决问题,只有从架构层面解决了,比如添加汇总表,或者使用 redis 这样的外部缓存系统。
共 0 条回复
没有找到数据。
PHP学院的中学生
注册时间:2018-10-23
最后登录:2025-03-24
在线时长:168小时46分
最后登录:2025-03-24
在线时长:168小时46分
- 粉丝29
- 金钱4730
- 威望30
- 积分6710