mysql中count(*),count(字段),count(1)的區別

count(主鍵id)

InnoDB 會遍歷全表,取每行的主鍵 id,返回給 server 層,server 層拿到數據後,進行判斷累加。

count(1)

InnoDB 仍遍歷全表,但是不取值,server 層對返回的每一行數據新增一個 1,然後進行判斷累加;

因此,count(1)要更快些,因爲無需取值。從引擎返回 id 會涉及到解析數據行,以及拷貝字段值的操作。

count(字段):

  1. 如果這個“字段”是定義爲 NOT NULL 的話,一行行地從記錄裏面讀出這個字段,判斷不能爲 NULL ,按行累加;
  2. 如果這個“字段”定義允許爲 NULL,那麼執行的時候,判斷到有可能是 NULL,還要把值取出來再判斷一下,不是 NULL 才累加。

count(*)

並不會把全部字段取出來,而是專門做了優化,不取值。count(*)肯定不是 NULL,按行累加。

結論:按照效率排序的話,count(字段)<count(主鍵
id)<count(1)≈count(),所以我建議你,儘量使用count()。

引用:https://www.jianshu.com/p/e1229342a5e2

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