MySQL的count(*)性能怎麼樣?

對於count(主鍵id)來講,innodb引擎會遍歷整張表,把每一行的id值都取出來,返回給server層,server層判斷id值不爲空,就按行累加優化

對於count(1)來講,innodb引擎遍歷整張表,但不取值,返回給server層,server對於返回的每一行,放一個數字1進去,判斷是不可能爲空的,就按行累加server

對於count(字段)來講,排序

若是這個字段定義爲not null,一行行的從記錄裏面讀出這個字段,判斷不爲空,則累加值innodb

若是這個字段定義容許爲null,那麼執行的時候,判斷到有可能爲null,還要把值取出來在判斷一下,不是null才累加效率

可是count(*)是例外遍歷

並不會把所有字段取出來,而是專門作了優化,不取值,count(*)確定不是null,按行累加db

因此這幾個按照效率排序的話,count(字段)<count(主鍵id)<count(1)≈count(*)co

因此,儘可能使用count(*)數字

相關文章
相關標籤/搜索