[Mysql] Count(*)性能問題

分頁時,我們需要查總條數:

SELECT COUNT(*) FROM tb
WHERE CREATE_DATETIME > '1998-01-01'

然後發現,這個求總數的sql竟然花了300ms,比取分頁數據的時間還長!

有人說不加WHERE條件的COUNT會非常快,因爲有單獨的地方存這個總數。然並卵……

把COUNT(*)換成COUNT(1),COUNT(主鍵),耗時都一樣。雖然"*"這個字符一直飽受詬病,但現在新版本的sql都已作了優化。

反覆嘗試之後,發現在CREATE_DATETIME上建立索引之後,查詢時間直接降到15ms!!

思考:COUNT()語句不關心列,但仍然需要按WHERE條件來檢索。所以優化連接條件和WHERE條件是優化COUNT()語句的關鍵。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章