MySQL的count方法你真的用對了嗎?
我們在日常工作中經(jīng)常使用count方法來計算行數(shù)。
那么你知道count(*)、count(1)、count(列名)應該用哪個嗎?
今天我們就來聊一聊這個問題吧!
01 執(zhí)行效率
列名為主鍵時:count(列名)和count(1)和count(*)執(zhí)行效率是一樣的,因為explain中type類型都為index
列名不為主鍵時,而且列名沒有創(chuàng)建索引,但是其他字段創(chuàng)建了索引:count(1)=count(*)>count(列名)。
因為expalin中的type類型count(1)和count(*)類型都為index,而count(列名)的type類型為all全表掃描。
列名不為主鍵,但是列名創(chuàng)建索引:count(1)=count(*)=count(列名),因為explain中type類型都為index。
如果表只有一個字段,則三者的執(zhí)行效率一樣。
02 主要區(qū)別
count(1)會統(tǒng)計表中的所有的記錄數(shù),包含字段為null的記錄。
count(字段)會統(tǒng)計該字段在表中出現(xiàn)的次數(shù),忽略字段為null的情況,即不統(tǒng)計字段為null的記錄。
count(*)會統(tǒng)計表中的所有的記錄數(shù),包含字段為null的記錄。
--THE END :下面是我的官方賬號,歡迎關注--
評論
圖片
表情
