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的纪录数。还有有区别的。

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

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

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

猜你喜欢

转载自bigbird2012.iteye.com/blog/1933043