mysql select count 5万条数据很慢_select count(1) 和 count(*),哪个性能更好?一起来测试一下...

相信很多小伙伴都想了解 count(1) 和 count(*) 的性能问题 ,今天给大家做一下测试。

声明:本文使用MySql数据库,数据库表里面有100万条数据。

先测试 count(*)

23ff82fbec494c3d81ec6baf2785bcf6

可以看出,count(*) 用时间差不多15s.

再测试 count(1)

a8bebf88114e4d8aa1c8d4af5111761a

看到这个数据,我知道很多小伙伴还是找不到心里的答案,上面的测试会不会存在一些客观原因,所以重启电脑后,重新测试一下 count(1)

a27f1761a6cf4084908000ecb2743701

这次用时34s,是不是很惊讶?

下面看看在稳定状态下的性能对比

cc65887174d04d30a55a183f1fd1535a

第一次

count(*) 5.49s

count(1) 5.11s

别着急,俗话都是三局两胜,五局三胜。

ef4fd569ea3e4539a91ffb3c13932f85

第二次

count(*) 4.86s

count(1) 5.64s

bc6c45d5029847129b264425d74bf6fb

第三次

count(*) 4.92s

count(1) 4.39s

第一个总结

从上面的比较可以看出,count(*) count(1) 在没条件的情况下两者没有什么区别。

下面使用有条件的 select 进行对比

ca6efebcdb8e48fba38c8c0b916d233d

对比了两次,可以看出count(*) 快于count(1), 下面来解释一下

count(1) 和count(*) 对比

如果你数据库没有主键,那么count(1) 比count(*) 快,

如果有主键作为条件count(),那么count(1) 比count(*) 快。

如果表里面只有一个字段,那么还是count(*)最快

count 解释

count(*) 返回表中所有存在行的总数,包括null

count(1) 返回的是去除null以外的所有行的总数,有默认值的也会被记录

感兴趣的同学,可以动手测试一下

三条经验

这个也是好久之前在网上看到的

  • 任何情况下select count(*) from table 是最优选择
  • 减少select count(*) from table where condition = ? 这样的查询
  • 杜绝 select count(colunm) from table
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值