MySQL - SELECT count(id) 跟 SELECT count(*) 哪個快?

這個問題很有趣,就連用 MySQL 很多年的人也可能不知道(對啦,就是我🤣

答案是:一樣快。

雖然 SELECT count(*) 的語意就像是要走訪所有欄位,感覺就會比 count(id) 來得慢,但其實 count(*) 在 MySQL 是 1 個特殊用法,代表計算多少筆資料,此處米字號並不是所有欄位的意思。

MySQL InnoDB 在處理 count(*) 時會試圖用最小次要索引(smallest available secondary index)計算共有多少筆資料,也就是說就算你明確寫 count(id), MySQL 也會使用它所認為比較好的索引計算共有多少筆資料,所以 count(id)count(*) 執行會一樣快。

p.s. MySQL MyISAM 本身就有存資料筆數資訊,所以就不像 InnoDB 需要算

如果不信的話,可以用 EXPLAIN 指令玩看看,應該可以發現它們都會使用同一個索引做查詢。

參考資料來源: MySQL 官方文件

InnoDB processes SELECT COUNT(*) statements by traversing the smallest available secondary index unless an index or optimizer hint directs the optimizer to use a different index. If a secondary index is not present, InnoDB processes SELECT COUNT(*) statements by scanning the clustered index.

p.s. 本文的假設都是 1 個資料表,且沒有任何 WHERE, GROUP BY 等條件的情況

FOLLOW US

對抗久坐職業傷害

研究指出每天增加 2 小時坐著的時間,會增加大腸癌、心臟疾病、肺癌的風險,也造成肩頸、腰背疼痛等常見問題。

然而對抗這些問題,卻只需要工作時定期休息跟伸展身體即可!

你想輕鬆改變現狀嗎?試試看我們的 PomodoRoll 番茄鐘吧! PomodoRoll 番茄鐘會根據你所設定的專注時間,定期建議你 1 項辦公族適用的伸展運動,幫助你打敗久坐所帶來的傷害!

贊助我們的創作

看完這篇文章了嗎? 休息一下,喝杯咖啡吧!

如果你覺得 MyApollo 有讓你獲得實用的資訊,希望能看到更多的技術分享,邀請你贊助我們一杯咖啡,讓我們有更多的動力與精力繼續提供高品質的文章,感謝你的支持!