MySQL優化之COUNT 效率

2021-05-26 20:23:17 字數 1391 閱讀 7058

說到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...