MySQL优化之COUNT(*)效能

作者:数据库

 

1.其余景况下SELECT COUNT(*) FROM tablename是最优接纳;

MySQL数据库的属性永世是大家议论的规范,上面就为您介绍MySQL数据库优化中有关COUNT(*)成效的的主题素材,希望对您能够享有协理。

MySQL优化之COUNT(*)效率

==========================================================

1.其它景况下SELECT COUNT(*) FROM tablename是最优选拔;

2.尽量调整和裁减SELECT COUNT(*) FROM tablename WHERE COL = ‘value’ 这种查询;

MySQL数据库优化中的COUNT(*)与COUNT(COL):
英特网找寻了下,开掘种种说法都有:
比如说以为COUNT(COL)比COUNT(*)快的;
认为COUNT(*)比COUNT(COL)快的;
再有朋友很好笑的提及那个实际是看人品的。

刚给一个爱人消除他写的Discuz!插件的标题,谈到MySQL的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进行全表遍历。

优化计算,对于MyISAM表来讲
1.别样景况下SELECT COUNT(*) FROM tablename是最优采纳;
2.尽量缩减SELECT COUNT(*) FROM tablename WHERE COL = 'value' 这种查询;
3.杜绝SELECT COUNT(COL) FROM tablename WHERE COL2 = 'value' 的出现。

 

发源为知笔记(Wiz)

2.尽量精减SELECT COUNT(*) FROM tablename WHERE COL = ‘value’ 这种查询;

3.杜绝SELECT COUNT(COL) FROM tablename的出现。

在不加WHERE限制条件的场所下,COUNT(*)与COUNT(COL)基本能够认为是等价的;
然则在有WHERE限制条件的景况下,COUNT(*)会比COUNT(COL)快不行多;

3.杜绝SELECT COUNT(COL) FROM tablename的出现。

 

具体的数据参照他事他说加以考查如下:

 

 

mysql> SELECT COUNT(*) FROM cdb_posts where fid = 604;
————
| COUNT(fid) |
————
| 79000 |
————
1 row in set (0.03 sec)

 

COUNT(*)与COUNT(COL)
英特网搜索了下,开采各样说法都有:
比方说认为COUNT(COL)比COUNT(*)快的;
认为COUNT(*)比COUNT(COL)快的;
再有朋友很好笑的提起那些其实是看人品的。

mysql> SELECT COUNT(tid) FROM cdb_posts where fid = 604;
————
| COUNT(tid) |
————
| 79000 |
————
1 row in set (0.33 sec)

COUNT(*)与COUNT(COL)

不加WHERE限制标准化的景况下,COUNT(*)与COUNT(COL)基本得以以为是等价的;
但是在有WHERE限制规范的情况下,COUNT(*)会比COUNT(COL)快不行多;

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(COL)比COUNT(*)快的;

mysql> SELECT COUNT(*) FROM cdb_posts where fid = 604;
————
| COUNT(fid) |
————
| 79000 |
————
1 row in set (0.03 sec)

COUNT时的WHERE
那点在此以前就写过,详细请看《Mysql中count(*),DISTINCT的选择方法和频率讨论》:

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

mysql> SELECT COUNT(tid) FROM cdb_posts where fid = 604;
————
| COUNT(tid) |
————
| 79000 |
————
1 row in set (0.33 sec)

轻巧易行说下,正是COUNT的时候,固然未有WHERE限制以来,MySQL直接再次回到保存有总的行数
而在有WHERE限制的气象下,总是须求对MySQL举办全表遍历。

还应该有朋友很好笑的谈起那几个实际上是看人品的。

mysql> SELECT COUNT(pid) FROM cdb_posts where fid = 604;
————
| COUNT(pid) |
————
| 79000 |
————
1 row in set (0.33 sec)

优化计算:
1.任何景况下SELECT COUNT(*) FROM tablename是最优采用;
2.尽量压缩SELECT COUNT(*) FROM tablename WHERE COL = ‘value’ 这种查询;
3.杜绝SELECT COUNT(COL) FROM tablename WHERE COL2 = ‘value’ 的出现。

本文由ca88发布,转载请注明来源

关键词: ca88网址 MySQL