count(*) count(id) count(1) count(字段)


最近在研究Mysql的時候針對這幾個的效率問題,就此查了一些文章,總結了一下。


 

count(id)
  InnoDB引擎會遍歷整張表,把每一行行的id值全部取出來,返回給server層,server層拿到id后,判斷是不可能為空的,就按行累加。
count(1)
  InnoDB引擎遍歷整張表,但不取值,server層對於返回的每一行,放一個數字 1 進去,判斷是不可能為空的,累計增加。
count(字段)
  1.如果這個字段是定義為not null的話,一行行地從記錄里面讀出這個字段,判斷不能為null,按行累加
  2.如果這個字段定義允許為null的話,判斷到有可能是null,還要把值取出來在判斷一下,不是null才累加。
count(*)
  不會把全部的字段取出來,而是做專門的優化,不取值,count(*)肯定不是null,按行累加。

總結:count(*)>count(1)>count(id)>count(字段)


免責聲明!

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



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