count(*)指的是 :統計所有的行數,包括為null的行。count(*)不單會進行全表掃描,也會對表的每個字段進行掃描。而count('x')或者count(COLUMN)或者count(0)等則只進行一個字段的全表掃描。需要注意的是count()是聚合函數,對于返回的結果集,一行行地判斷,累計值加1,最后返回累計值,count(*)、count(主鍵ID)和count(1)表示返回滿足條件的結果集的總行數。
count(*)的含義
1、count(1):
count(1):計算一共有多少符合條件的行,不會忽略null值。
其實就可以想成表中有這么一個字段,這個字段就是固定值1,count(1),就是計算一共有多少個1。同理,count(2),也可以,得到的值完全一樣,count('x'),count('y')都是可以的。
count(*),執行時會把星號翻譯成字段的具體名字,效果也是一樣的,不過多了一個翻譯的動作,比固定值的方式效率稍微低一些。
2、count(列名):
count(列名):查詢列名那一列的,字段為null不統計。
這里的空不是只空字符串或者0,而是表示null的計數,即某個字段值為NULL時,不統計。
3、執行效果:
(1)count(*)包括了所有的列,相當于行數,在統計結果的時候,不會忽略列值為NULL。
(2)count(1)包括了忽略所有列,用1代表代碼行,在統計結果的時候,不會忽略列值為NULL。
(3)count(列名)只包括列名那一列,在統計結果的時候,會忽略列值為空。
4、執行效率:
(1)列名為主鍵,count(列名)會比count(1)快 。
(2)列名不為主鍵,count(1)會比count(列名)快 。
(3)如果表多個列并且沒有主鍵,則 count(1) 的執行效率優于 count(*) 。
(4)如果有主鍵,則 select count(主鍵)的執行效率是最優的。
(5)如果表只有一個字段,則 select count(*)最優。
[免責聲明]
文章標題: count(*)的含義
文章內容為網站編輯整理發布,僅供學習與參考,不代表本網站贊同其觀點和對其真實性負責。如涉及作品內容、版權和其它問題,請及時溝通。發送郵件至36dianping@36kr.com,我們會在3個工作日內處理。