結論:
count(*)>count(1)>count(主鍵id)>count(字段)
原因:
count(*)單獨做過優化,只掃描普通索引樹,並且不會取值,按行累加
count(1)遍歷表放一個數字“1”進去,判斷是不可能為空的,按行累加
count(主鍵id)遍歷表,解析數據把id值取出來,按行累加
count(字段)遍歷表,解析數據,判斷是否為null,按行累加,如果不是索引的更慢
引擎差異:
innodb表引擎的都要遍歷表,因為存在事務下的mvcc機制的原因
myisam引擎的count(*)直接存儲了值,不需要遍歷直接取值所以最快