sql查询时 count(*),count(1),count(列名)区别和效率

count()的用法:主要用于查询表中数据的数量,常用的查询语句有count(*),count(字段),count(1),count(主键)。

1、count(主键)

会遍历所有主键取出所有的值并按行累加,因为主键不会为空,最终会返回总的行数。

2、count(字段)

会遍历所有该字段,如果为null则跳过,否则取出并累加,最后返回的是非null的总和。

3、count(1)

会遍历整张表,但不取值,直接计算行数。因此count(1)的性能要高于count(主键)。
和count(主键)相比,count(1)少了一个取值的动作,减少的这个取值的动作使得count(1)的效率高于count(主键)。

4、count(*)

count()的用法在早期的数据库和现在的数据库中有较大的差距。
在早期的数据库中,count(
)有可能会导致全表的扫描,因此效率会低。
如今的数据库引擎对count()做了优化,比如MyIsam引擎中count()会直接读取一个总行数的值,因此速度是最快的,InnoDB也同样对count()做了优化,用类似count(1)的方式获取行数,因此count()效率接近count(1)。

总结

执行效率:count(列名) < count(主键) < count(1) ≈ count(*)


版权声明:本文为weixin_40482816原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。