MySql中的count、NULL和空串的區別


1、count (1)、count (*) 與 count (列名) 的區別

count(1) count(*) count (列名)
作用 統計表中的所有的記錄數 會統計表中的所有的記錄數 統計該字段在表中出現的次數
是否包含字段為 null 包含 包含 不包含
區別 count (1) 和 count (*) 基本沒差別,實際建議count (*) count (1) 和 count (*) 基本沒差別實際建議count (*)

效率:

  • 列名為主鍵,count (列名) 會比 count (1) 快
  • 列名不為主鍵,count (1) 會比 count (列名) 快
  • 如果表多個列並且沒有主鍵,則 count(1) 的執行效率優於 count(*)
  • 如果有主鍵,則 select count(主鍵)的執行效率是最優的
  • 如果表只有一個字段,則 select count(*)最優。

2、MYSQL 中Null 和空串的區別,以及比較

null 空字符串
含義 “沒有值” 或 “未知值”,且它被看作與眾不同的值。 空字符串
比較 IS NULL或者IS NOT NULL =、< 或!=

如果字符串和Null比較,會發生什么情況?
注意:=<=>的區別

3、各函數對Null的處理

函數 效果
AVG () 忽略 NULL 值,而不是將其作為 “0” 參與計算
COUNT(*) 不忽略NULL 值
COUNT (字段名) 忽略NULL 值
SUM () 忽略 NULL 值。且當對多個列運算求和時,如果運算的列中任意一列的值為 NULL,則忽略這行的記錄。
GROUP BY 兩個 NULL 值視為相同。
如果運行 ORDER BY ... ASC,則 NULL 值出現在最前,若運行 ORDER BY ... DESC,則 NULL 值出現在最后。
distinct 無論遇到多少個空值,結果中只返回一個 null

附、參考:

  1. count (1)、count (*) 與 count (列名) 的執行區別 - iFuMI 的博客 - CSDN 博客
    注:很棒的一篇文章。
  2. 高性能 MySQL——Count (1) OR Count (*)? - 知乎
    注:原文有錯,不過還是值得參考。
  3. SQL 中的 SUM ()、AVG ()、COUNT () 等聚集函數對 NULL 值的處理方法 - J__Max 的博客 - CSDN 博客
  4. MySql 判斷是否為 null 或空字符串 - bestlove12345 的博客 - CSDN 博客
  5. MySql 中判斷字符串相等 - 洋成林 - CSDN 博客


免責聲明!

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



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