經過查詢研究得出這個和MySQL中用什么引擎有關,比如InnoDB和MyISAM在處理這count(*)、count(1)、count(field)都有不同的方式,還有就是和版本都有關系,不同的版本會對查詢進行優化處理等等。
下面是網絡上普遍的解釋:
count(*)對行的數目進行計算,包含NULL count(column)對特定的列的值具有的行數進行計算,不包含NULL值。 count()還有一種使用方式,count(1)這個用法和count(*)的結果是一樣的。 任何情況下select count(*) from tablename是最優選擇; 盡量減少select count(*) from tablename where COL = ‘value’這種查詢; 杜絕select count(COL) from tablename where COL2 = ‘value’的出現。 如果表沒有主鍵,那么count(1)比count(*)快。 如果有主鍵,那么count(主鍵,聯合主鍵)比count(*)快。 如果表只有一個字段,count(*)最快。 count(1)跟count(主鍵)一樣,只掃描主鍵。count(*)跟count(非主鍵)一樣,掃描整個表。明顯前者更快一些。 若含有where語句,則會優先where中條件索引。
做查詢優化時,可以根據官方文檔和數據來進行嘗試和調優,這樣去處理才能根本解決問題。
參考:
https://segmentfault.com/a/1190000009208277
http://blog.163.com/bobile45@126/blog/static/960619922012915102919319/
https://segmentfault.com/q/1010000000761427
http://blog.csdn.net/unifirst/article/details/52153902
http://www.111cn.net/database/mysql/53202.htm
http://blog.csdn.net/lzm18064126848/article/details/50491956