1.在任何情況下,從xxx中選擇COUNT(*)都是最佳選擇;
2.最小化select count(*)from XXX where col = ' XXX '的查詢;
3.杜絕select count(col)from tablename where col = ' XXX '的出現。(其中col不是主鍵)
環境:
MySQL版本:5.0.45
操作系統:Windows XP SP3
數據表1:斯芬克斯
+———-+——————+——+—–+———+—————-+
| Field | Type | Null | key | Default | Extra |
+———-+——————+——+—–+———+—————-+
| id | int(10)無符號| no | pri | NULL | auto_increment |
| til | varchar(100) | no | | | |
|內容|正文|無|無|無|無
| dataline | int(11)| no | | ||
+———-+——————+——+—–+———+—————-+
記錄數量:1120100
查詢1:
mysql & gt從sphinx中選擇count(*)作為totalnum
+———-+
|總數|
+———-+
| 1120100 |
+———-+
65438+集合中的0行(0.00秒)
問題2:
mysql & gt從sphinx中選擇count(*)作為totalnum,其中id & gt1000;
+———-+
|總數|
+———-+
| 1119100 |
+———-+
集合中的1行(2.17秒)
問題3:
mysql & gt從sphinx中選擇count(*)作為totalnum,其中id & gt1000;
+———-+
|總數|
+———-+
| 1119100 |
+———-+
集合中的1行(0.61秒)
問題4:
mysql & gt從sphinx中選擇count(*)作為totalnum,其中id & gt1000;
+———-+
|總數|
+———-+
| 1119100 |
+———-+
集合中的1行(0.61秒)
查詢5:
mysql & gt從sphinx中選擇count(id)作為totalnum
+———-+
|總數|
+———-+
| 1120100 |
+———-+
65438+集合中的0行(0.00秒)
問題6:
mysql & gt從sphinx中選擇count(til)作為totalnum,其中id & gt1000;
+———-+
|總數|
+———-+
| 1119100 |
+———-+
集合中的1行(1分38.61秒)
查詢7:
mysql & gt從sphinx中選擇count(id)作為totalnum,其中id & gt11000;
+———-+
|總數|
+———-+
| 1109100 |
+———-+
集合中的1行(0.61秒)
查詢8:
mysql & gt從sphinx中選擇count(id)作為totalnum
+———-+
|總數|
+———-+
| 1120100 |
+———-+
集合中的1行(0.03秒)
結論:
當select count()沒有where條件時,select count(*)和select count(col)消耗的查詢時間幾乎相同。
當select count()有where條件時,select count(col)消耗的查詢時間明顯比select count(*)多壹個數量級。