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 |
附、參考: