說到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』 的出現。
MySQL優化之COUNT 效率
count 與count col 網上搜尋了下,發現各種說法都有 比如認為count col 比count 快的 認為count 比count col 快的 還有朋友很搞笑的說到這個其實是看人品的。在不加where限制條件的情況下,count 與count col 基本可以認為是等價的 但是在有wh...
MySQL查詢優化之COUNT
count 聚合函式,以及如何優化使用了該函式的查詢,很可能是mysql中最容易被誤解的前10個話題之一,在網上隨便搜尋一下就能看到很多錯誤的理解,可能比我們想象的多得多。在做優化之前,先來看看count 函式的真正作用是什麼。count 的作用 count 的另外乙個作用是統計結果集的行數。當my...
MySQL優化 1億條資料效率COUNT
最近發現了乙個mysql快速匯入資料方法load data infile,具體參考這個文章。下面用幾條命令來給大家看看,效率結果。簡單說下 1.txt 開始只有10萬資料,後來用vim 新增到了2000萬行,用windows下的編輯器直接卡機的,windows下安裝gvim可以的。資料表型別inno...