MySQL查詢count(*)、count(1)、count(field)的區別收集


經過查詢研究得出這個和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


免責聲明!

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



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