count(*)和count(1)和count(列名)的區別


count是一種最簡單的聚合函數,一般也是我們第一個開始學習的聚合函數,那么他們之間究竟由什么區別呢?

有的人說count(1)和count(*)他們之間有區別,而有的人說他們之間沒有區別那么他們之間到底有沒有區別呢。

從執行結果來說:

        count(1)和count(*)之間沒有區別,因為count(*)count(1)都不會去過濾空值,

         但count(列名)就有區別了,因為count(列名)會去過濾空值。

從執行效率來說:

         他們之間根據不同情況會有些許區別,MySQL會對count(*)做優化。

         (1)如果列為主鍵,count(列名)效率優於count(1)  

         (2)如果列不為主鍵,count(1)效率優於count(列名)  

         (3)如果表中存在主鍵,count(主鍵列名)效率最優  

         (4)如果表中只有一列,則count(*)效率最優  

          (5)如果表有多列,且不存在主鍵,則count(1)效率優於count(*)

---------------------------------------------------------------------------------------------------------

補充關於count(1)count(*)原理 引用百度知道專業回答

count(1),其實就是計算一共有多少符合條件的行。
1並不是表示第一個字段,而是表示一個固定值。
其實就可以想成表中有這么一個字段,這個字段就是固定值1,count(1),就是計算一共有多少個1.

count(*),執行時會把星號翻譯成字段的具體名字,效果也是一樣的,不過多了一個翻譯的動作,比固定值的方式效率稍微低一些。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM