count(*)為什么慢?和優化


count(*)為什么慢?

**MyISAM **

MyISAM 引擎把一個表的總行數存在了磁盤上,因此執行 count(*) 的時候會直接返回這個數,效率很高;

InnoDB

而 InnoDB 引擎就麻煩了,它執行 count(*) 的時候,需要把數據一行一行地從引擎里面讀出來,然后累積計數。

因為,innoDB要支持並發和事務

mysql的小優化

InnoDB 是索引組織表,主鍵索引樹的葉子節點是數據,而普通索引樹的葉子節點是主鍵值。所以,普通索引樹比主鍵索引樹小很多對於 count(*) 這樣的操作,遍歷哪個索引樹得到的結果邏輯上都是一樣的。因此,MySQL 優化器會找到最小的那棵樹來遍歷。在保證邏輯正確的前提下,盡量減少掃描的數據量,是數據庫系統設計的通用法則之一。

優化

可以在表上加上一個計數字段,或者設計一張單獨的表來存儲計數

查詢記錄數效率

按照效率排序的話,count(字段)<count(主鍵 id)<count(1)≈count(*),所以盡量使用 count(*)。

參考鏈接

https://time.geekbang.org/column/article/72775


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM