Mysql count 的多种使用方式性能比较
程序员文章站
2022-09-03 08:58:47
Mysql的count函数用于统计符合条件的记录数,常用的方式有:1、count(*)2、count(1)3、count(id)4、count(col)首先需要明确一点:count函数对于返回的结果集,一行行地判断,不会统计null值。初学者经常会纠结到底应该使用哪种方式做计数,实际上这四种计数方式是有很大差别的。count的原理是count(*)遍历整张表,不需要取出数据来计算,直接按行累计。count(1)遍历整张表,不需要取数,循环计数。count(id)遍历整...
Mysql的count函数用于统计符合条件的记录数,常用的方式有:
1、count(*)
2、count(1)
3、count(id)
4、count(col)
首先需要明确一点:count函数对于返回的结果集,一行行地判断,不会统计null值。
初学者经常会纠结到底应该使用哪种方式做计数,实际上这四种计数方式是有很大差别的。
count()的原理:
-
count(*)
遍历整张表,不需要取出数据来计算,直接按行累计。 -
count(1)
遍历整张表,不需要取数,按行计数。 -
count(id)
遍历整张表,取出id,按行计数。 -
count(col)
遍历整张表,取出col,如果字段定义不为null,取出col之后,按行计数。如果字段定义可以为null,循环对col进行判断是否为null值,再计数。
这四种计数方式遍历整张表的方式也有不同:
- count(*)
会找任意较小的索引遍历,如果没有二级索引,就会直接遍历主键索引,因为主键索引包含了全表数据,所以在字段比较大的时候,可能会需要频繁去磁盘取数据,导致count() 效率低,耗时长,结局方案是给一个小字段加个二级索引,这样count() 的时候就会遍历这个二级索引,快速进行计数。 - count(1)
使用索引遍历的选择和 count(*)一致。 - count(id)
使用主键索引遍历 - count(col)
如果col建立了二级索引,则会遍历二级索引,否则主键索引
所以,性能上排序为:count(*) > count(1) > count(id) > count(col)。
在不考虑是否对null计数得区别的前提下,性能优化的方向,除了使用count(*) 外,就是适当使用小的二级索引。
本文地址:https://blog.csdn.net/hhhzua/article/details/107651084