MySQL COUNT函数优化及count(1)/count(*)/count(列名)的区别

count函数优化

MySQL COUNT函数优化及count(1)/count(*)/count(列名)的区别_第1张图片

使用近似值:

在某些应用场景中,不需要完全精确的值,可以参考使用近似值来代替,比如可以使用explain来获取近似的值。其实在很多OLAP的应用中,需要计算某一个列值的基数,有一个计算近似值的算法叫做HyperLogLog

更复杂的优化:

一般情况下,count()需要扫描大量的行才能获取精确的数据,其实很难优化,在实际操作的时候可以考虑使用索引覆盖扫描,或者增加汇总表,湖畔这增加外部缓存系统。

 

count(1)/count(*)/count(列名)的区别

一句话概括:在执行效率上,这三种没区别!!!有图有真相—— 

不要再说出count(1)比count(*)快这么low的话了!!!

MySQL COUNT函数优化及count(1)/count(*)/count(列名)的区别_第2张图片

 count(1):

 count(列名):

 

count(*):

再来看看执行时间:

MySQL COUNT函数优化及count(1)/count(*)/count(列名)的区别_第3张图片

 如果存在列为null的情况,count(列名)不会统计为null的列,其他两种会统计为null的数据。

你可能感兴趣的:(MySQL)