mysql的count函数优化ITeye - 千亿集团

mysql的count函数优化ITeye

2019年04月01日10时15分42秒 | 作者: 旭彬 | 标签: 索引,优化,情况 | 浏览: 2026

mysql的count优化整体上有以下注意事项:
1.任何情况下SELECT COUNT(*) FROM tablename是最优挑选;
2.尽量削减SELECT COUNT(*) FROM tablename WHERE COL = value’ 这种查询;
3.根绝SELECT COUNT(COL) FROM tablename的呈现。

COUNT(*)和COUNT(字段名)他们的功能参阅比照:

COUNT(*)与COUNT(COL)
网上查找了下,发现各种说法都有:
比方以为COUNT(COL)比COUNT(*)快的;
以为COUNT(*)比COUNT(COL)快的;
还有朋友很搞笑的提到这个其实是看人品的。
在不加WHERE约束条件的情况下,COUNT(*)与COUNT(COL)根本能够以为是等价的;
可是在有WHERE约束条件的情况下,COUNT(*)会比COUNT(COL)快十分多;
具体的数据参阅如下:
mysql SELECT COUNT(*) FROM cdb_posts where fid = 604;
+————+
| COUNT(fid) |
+————+
| 79000 |
+————+
1 row in set (0.03 sec)
mysql SELECT COUNT(tid) FROM cdb_posts where fid = 604;
+————+
| COUNT(tid) |
+————+
| 79000 |
+————+
1 row in set (0.33 sec)
mysql SELECT COUNT(pid) FROM cdb_posts where fid = 604;
+————+
| COUNT(pid) |
+————+
| 79000 |
+————+
1 row in set (0.33 sec)
 
COUNT(*)通常是对主键进行索引扫描,而COUNT(COL)就不必定了,别的前者是统计表中的一切契合的纪录总数,而后者是核算表中一切契合的COL的纪录数。还有有差异的。
COUNT时的WHERE
这点曾经就写过,具体请看《Mysql中count(*),DISTINCT的运用方法和功率研讨》
简略说下,便是COUNT的时分,假如没有WHERE约束的话,MySQL直接回来保存有总的行数
而在有WHERE约束的情况下,总是需要对MySQL进行全表遍历。

在MySQL5下,select count(*) 和select count(id)是彻底相同的。
表里有300万+条记载。
花了0.8秒,可是我用explain检查查询方案时,却发现它没有用primiary的index,所以强制它运用主键索引,成果花费了7秒!
我细心研讨了一下默许时运用的索引,居然是用的一个bit(1)上的索引,这个字段便是一个标志位。

想了一下,估量由于这个索引最小,根据bit(1),而主键是根据int(4)的,而且一切索引都能用于核算count(*),由于总是一条记载对应一个索引元素。

因此有一个小技巧提供给楼主:假如你的表中有相似标志位(比方是否逻辑删去)的字段,那么在其上树立一个索引,会把count(*)的速度进步数倍。当然最好用bit(1)类型,而不是int或char(1)保存标志位,那样会更慢。

mysql的count优化总结:
1.任何情况下SELECT COUNT(*) FROM tablename是最优挑选;
2.尽量削减SELECT COUNT(*) FROM tablename WHERE COL = value’ 这种查询;
3.根绝SELECT COUNT(COL) FROM tablename的呈现。
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表千亿集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    mysql的count函数优化ITeye

    索引,优化,情况
  • 2
  • 3

    DB2锁机制ITeye

    机制,程序,数据
  • 4

    oracle功能优化总结ITeye

    索引,视图,优化
  • 5

    oracle存储进程ITeye

    存储,进程,数据
  • 6

    Oracle中rownum、rowid、rowITeye

    相同,记载,排名
  • 7
  • 8
  • 9

    解析oracle的rownum(转载)ITeye

    查询,记载,运用
  • 10