MySql-count(*)与count(id)与count(字段)之间的执行结果和性能分析

在mysql数据库中,当我们需要统计数据的时候,一定会用到count()这个方法,那么count(值)里面的这个值,到底应该怎么选择呢!常见有3种选择,(*,数字,列名),分别列出它们的执行结果和性能对比。

执行效果:  
count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL 
count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL  
count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是指空字符串或者0,而是null)的计数,即某个字段值为NULL时,不统计。

测试结果:  

复制代码
 1 CREATE TABLE `test_count` (
 2   `id` int(11) NOT NULL AUTO_INCREMENT,
 3   `phone` varchar(11) DEFAULT NULL,
 4   `nick_name` varchar(50) DEFAULT NULL,
 5   `username` varchar(50) DEFAULT NULL,
 6   `password` varchar(50) DEFAULT NULL,
 7   `gender` tinyint(1) DEFAULT NULL,
 8   `is_del` tinyint(1) DEFAULT NULL,
 9   PRIMARY KEY (`id`),
10   KEY `index_username` (`username`) USING BTREE
11 ) ENGINE=InnoDB AUTO_INCREMENT=17805 DEFAULT CHARSET=utf8;
复制代码
复制代码
 1 [SQL] SELECT COUNT(*) FROM test_count;
 2 受影响的行: 0
 3 时间: 0.828ms
 4  
 5 [SQL] 
 6 SELECT COUNT(1) FROM test_count;
 7 受影响的行: 0
 8 时间: 0.827ms
 9  
10 [SQL] 
11 SELECT COUNT(id) FROM test_count;
12 受影响的行: 0
13 时间: 0.873ms
14  
15 [SQL] 
16 SELECT COUNT(username) FROM test_count;
17 受影响的行: 0
18 时间: 0.981ms
19  
20 [SQL] 
21 SELECT COUNT(nick_name) FROM test_count;
22 受影响的行: 0
23 时间: 7.673ms
复制代码

在100W+数据下,count(*)和count(1)差距微乎其微,但两者效率大于count(id),count(id)效率明显大于count(column),带索引的count(column)明显效率高于不带索引的。

最终结论:

count(1) > count(*) > count(主键id) > count(带索引column) > count(不带索引column),count(1)效率稍微高于count(*),但差距微乎其微。

posted @   第一夫人  阅读(3781)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示