一 簡介:今天咱們來聊聊mysql的查詢總數
二 具體介紹
1 從引擎層面說
myisam myisam的掃描總行數是非常快的,這是因為myisam會將表的總行數存儲起來,定期維護,但是注意,一旦加入where條件,這個優勢就會消失
innodb innodb 的掃描總行數隨着數據量的增大越來越慢,innodb自身因為MVCC機制,不同事務讀取的總行數可能不同,所以維護一個單獨的總行數沒有什么意義
2 從查詢方式說起
1 select count(*) 2 select count(primary) 3 select count(非paimary) 4 select count(1)
分析思路
1 要考慮 值是否是NULL 2 要考慮從B+樹讀取記錄 3 統計字段的大小
執行效率 1=4 > 2 > 3
三 總結
1盡量選擇 select count(*) ,因為count(*)做過優化,並不取值和進行NULL判斷,更不必考慮統計字段的大小
2 對於select count(*)的explain,如果輔助索引很小,會按照輔助索引走,如果大,就按照主鍵來走了,基於成本