count(*) count(1) count(字段) count(主鍵) 誰更快

以下討論都是基于InnoDB引擎
count是一個聚合函數(shù),InnoDB只負(fù)責(zé)根據(jù)需求返回結(jié)果集,具體的計(jì)算過程再Server層完成

  • count(主鍵): InnoDB會遍歷整張表,把每一行的id取出來,返回給Server層,server判斷id是否為空,不為空則累加

  • count(1): InnDB遍歷整張表,但是不取值,Server層對于返回的每一行都會放一個數(shù)字1進(jìn)行,然后判斷是否為空,不為空則累加

  • count(字段):

    1. 如果字段定義為not null, InnoDB會從表中讀取出這個字段,Server層判斷值不可能為空,直接累加
    2. 如果字段定義為null, InnoDB從表中讀取整個字段是會將值也讀取出來,Server層判斷值是否為空,不為空則累加
  • count(*): Mysql對count(*) 專門做了優(yōu)化,InnoDB再掃描的時(shí)候不取值,返回給Server層,Serve層直接按行累加

所以按效率排序是: count(*) ≈ count(1) > count(主鍵) count(字段)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容