mysql 优化count_MySQL优化之COUNT()效率

COUNT(*)与COUNT(COL)

网上搜索了下,发现各种说法都有:

比如认为COUNT(COL)比COUNT(*)快的;

认为COUNT(*)比COUNT(COL)快的;

还有朋友很搞笑的说到这个其实是看人品的。

在不加WHERE限制条件的情况下,COUNT(*)与COUNT(COL)基本可以认为是等价的;

但是在有WHERE限制条件的情况下,COUNT(*)会比COUNT(COL)快非常多;(待测)

具体的数据参考如下:

[SQL] select count(*) from campaign_content_report   (存在主键)

10次测试

最快时间: 0.011ms

最慢时间: 0.908ms   (应该很服务器响应时间有关)

命中最多的范围:0.011ms~0.014ms

[SQL] select count(*) from campaign_content_report where campaign_id = '11081911350290' (存在主键)

受影响的行: 0

最快时间: 0.014ms

最慢时间: 0.024ms

[SQL] select count(campaign_id) from campaign_content_report where campaign_id = '11081911350290'

受影响的行: 0

最快时间: 0.014ms

最慢时间: 0.019ms

COUNT(*)通常是对主键进行索引扫描,而COUNT(COL)就不一定了,另外前者是统计表中的所有符合的纪录总数,而后者是计算表中所有符合的COL的纪录数。还有有区别的。

如果表没有主键,那么count(1)比count(*)快。

如果有主键,那么count(主键,联合主键)比count(*)快。

如果表只有一个字段,count(*)最快。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值