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