都2020年了,你还不知道count(1)和count(*)谁效率更高吗?

简介: 今天公司的一个需求需要统计一个数据库中表的行数有多少,二话不说当然就直接用count()这个聚合函数,以前经常听到一种说法说count(1)的效率比count(*)要高,于是测试了一下count(1)和count(*)的速度差距,发现两者的查询速度很接近,甚至count(*)要更快一些,于是就有了这篇文章。

1.count()的用法

count()聚合函数应该是我们学习数据库时最早学到的函数,主要用于查询表中数据的数量,常用的查询语句有count(*),count(字段),count(1),count(主键)。


2.count(主键)

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


3.count(字段)

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


4.count(1)

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


5.count(*)

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


6.总结

总的来讲,在如今的系统中,你大可放心的使用count(*),他的效率是最高的,如果你要兼容10年前的系统,那就使用count(1)。



相关文章
|
7月前
|
数据库
count(1)、count(*)、count(column)的含义、区别、执行效率
总之,`count(1)` 和 `count(*)` 通常会更常用,因为它们的执行效率较高,不涉及对具体列值的处理。而 `count(column)` 适用于统计特定列中的非空值数量。在实际使用时,可以根据情况选择适合的方式。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
103 0
|
存储 SQL 关系型数据库
count(1)、count(具体字段)和count(*)究竟有什么区别?
count(1)、count(具体字段)和count(*)究竟有什么区别?
142 0
|
存储 SQL 架构师
性能大PK count(*)、count(1)和count(列)
最近的工作中,我听到组内两名研发同学在交流数据统计性能的时候,聊到了以下内容: 数据统计你怎么能用 count(*) 统计数据呢,count(*) 太慢了,要是把数据库搞垮了那不就完了么,赶紧改用 count(1),这样比较快...... 有点儿好奇,难道 count(1) 的性能真的就比 count(*) 要好吗? 印象中网上有很多的文章都有过类似问题的讨论,那 MySQL 统计数据总数 count(*) 、count(1)和count(列名) 哪个性能更优呢?今天我们就来聊一聊这个问题。
性能大PK count(*)、count(1)和count(列)
|
SQL 关系型数据库 MySQL
|
SQL 索引
count(1) and count(column)那个更优?
count(1) and count(column)那个更优?
85 0
|
存储 SQL 缓存
count(*)那么慢能用吗,该怎么办呢?
大家好前面我们大概了解了为什么delete from表名,表的大小还是没有变小!以及数据删除流程,数据页空洞,online和inplace。重建表的两种实现方式。今天介绍一下为什么count(*)那么慢。
count(*)那么慢能用吗,该怎么办呢?
|
关系型数据库 数据库
都2020年了,你还不知道count(1)和count(*)谁效率更高吗?
今天公司的一个需求需要统计一个数据库中表的行数有多少,二话不说当然就直接用count()这个聚合函数,以前经常听到一种说法说count(1)的效率比count(*)要高,于是测试了一下count(1)和count(*)的速度差距,发现两者的查询速度很接近,甚至count(*)要更快一些,于是就有了这篇文章。
|
关系型数据库 MySQL 测试技术
论证select count(*)和select count(1)
论证select count(*)和select count(1)
132 0
|
索引
Select count(*)、Count(1)、Count(0)的区别和执行效率比较
结论https://www.cnblogs.com/sueris/p/6650301.html 这里把上面实验的结果总结一下: count()和count(1)执行的效率是完全一样的。
2437 0