优化总结:
1.任何情况下SELECT COUNT(*) FROM xxx 是最优选择;
2.尽量减少SELECT COUNT(*) FROM xxx WHERE COL = ‘xxx’ 这种查询;
3.杜绝SELECT COUNT(COL)FROM tablename WHERE COL = ‘xxx’ 的出现。(其中COL非主键)
环境:
MySQL版本:5.0.45
OS:Windows XP SP3
数据表一:sphinx
+———-+——————+——+—–+———+—————-+
| Field
+———-+——————+——+—–+———+—————-+
|id
|til
| content
| dataline |int(11)
+———-+——————+——+—–+———+—————-+
记录数:1120100
查询一:
mysql> select count(*) as totalnum fromsphinx;
+———-+
| totalnum |
+———-+
|
+———-+
1 row in set (0.00sec)
查询二:
mysql> select count(*) as totalnum from sphinxwhere id>1000;
+———-+
| totalnum |
+———-+
|
+———-+
1 row in set (2.17sec)
查询三:
mysql> select count(*) as totalnum from sphinxwhere id>1000;
+———-+
| totalnum |
+———-+
|
+———-+
1 row in set (0.61sec)
查询五:
mysql> select count(id) as totalnum fromsphinx;
+———-+
| totalnum |
+———-+
|
+———-+
1 row in set (0.00sec)
查询六:
mysql> select count(til) as totalnum from sphinxwhere id>1000;
+———-+
| totalnum |
+———-+
|
+———-+
1 row in set (1 min38.61 sec)
查询七:
mysql> select count(id) as totalnum from sphinxwhere id>11000;
+———-+
| totalnum |
+———-+
|
+———-+
1 row in set (0.61sec)
查询八:
mysql> select count(id) as totalnum fromsphinx;
+———-+
| totalnum |
+———-+
|
+———-+
1 row in set (0.03sec)
结论:
在 select count() 没有 where 条件的时候 select count(*) 和 selectcount(col) 所消耗的查询时间相差无几。
在 select count() 有 where 条件的时候 select count(col) 所消耗的查询时间 比 selectcount(*) 明显多出数量级的时间。