資料庫中count(1)、count(*)、count(列名)的總結
阿新 • • 發佈:2018-11-12
含義:
1、count(*) :統計所有的行數,包括為null的行(COUNT(*)不單會進行全表掃描,也會對錶的每個欄位進行掃描。而COUNT('x')或者COUNT(COLUMN)或者COUNT(0)等則只進行一個欄位的全表掃描)。
2、count(1):計算一共有多少符合條件的行(其實就可以想成表中有這麼一個欄位,這個欄位就是固定值1,count(1),就是計算一共有多少個1..同理,count(2),也可以,得到的值完全一樣,count('x'),count('y')都是可以的。count(*),執行時會把星號翻譯成欄位的具體名字,效果也是一樣的,不過多了一個翻譯的動作,比固定值的方式效率稍微低一些。)
3、count(列名):查詢列名那一列的,欄位為null不統計。
執行效果:
1、count(*)包括了所有的列,相當於行數,在統計結果的時候,不會忽略列值為NULL。
2、count(1)包括了忽略所有列,用1代表程式碼行,在統計結果的時候,不會忽略列值為NULL。
3、count(列名)只包括列名那一列,在統計結果的時候,會忽略列值為空。
執行效率:
- 列名為主鍵,count(列名)會比count(1)快
- 列名不為主鍵,count(1)會比count(列名)快
- 如果表多個列並且沒有主鍵,則 count(1) 的執行效率優於 count(*)
- 如果有主鍵,則 select count(主鍵)的執行效率是最優的
- 如果表只有一個欄位,則 select count(*)最優