1. 程式人生 > 其它 >sql中count(1)、count(*)和count(欄位名)的區別sql中count(1)、count(*)和count(欄位名)的區別

sql中count(1)、count(*)和count(欄位名)的區別sql中count(1)、count(*)和count(欄位名)的區別

測試例項


count(1)測試,sql語句如下:

select count(1) from ums_member;

結果如下:


count(*)測試,sql語句如下:

select count(*) from ums_member;
結果如下:

count(主鍵)測試,sql語句如下:

select count(id) from ums_member; --id為主鍵欄位
結果如下:


count(普通列)測試,sql語句如下:

select count(phone) from ums_member;
結果如下:


count(1)、count(*)和count(欄位名)執行效果上的區別
count(*)包括了所有的列,相當於行數,在統計結果的時候,不會忽略列值為NULL
count(1)包括了忽略所有列,用1代表程式碼行,在統計結果的時候,不會忽略列值為NULL
count(列名)只包括列名那一列,在統計結果的時候,會忽略列值為空(這裡的空不是隻空字串或者0,而是表示null)的計數,即某個欄位值為NULL時,不統計。
count(1)、count(*)和count(欄位名)執行效率上的區別
如上可以看出其實四種方式的效率是一樣的,但是網上有如下說法:

列名為主鍵,count(列名)會比count(1)快
列名不為主鍵,count(1)會比count(列名)快
如果表多個列並且沒有主鍵,則 count(1) 的執行效率優於 count(*)
如果有主鍵,則 select count(主鍵)的執行效率是最優的
如果表只有一個欄位,則 select count(*)最優。
具體的情況還是得看業務場景中使用時的效果,在業務場景中可以多試試。


————————————————
版權宣告:本文為CSDN博主「走不動的木木」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/Jame_s/article/details/102926383