首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL ISNULL 函數與 IS NULL 用法詳解:從基礎到索引優化

     編輯:MySQL 綜合教學

MySQL 中的 ISNULL() 函數與 IS NULL 運算子

在 MySQL 中,判斷欄位值是否為 NULL 是常見的查詢需求。MySQL 提供了 ISNULL() 函數,但其行為與 SQL Server 的同名函數有所不同。更常用、也更符合 SQL 標準的做法是使用 IS NULL 和 IS NOT NULL 運算子。

基本查詢範例

-- 查詢 name 為 NULL 的記錄
SELECT * FROM newtable WHERE name IS NULL;

-- 查詢 title 不為 NULL 的記錄
SELECT * FROM tbas_table WHERE title IS NOT NULL;

-- 實際業務範例
SELECT `click`, `title`, `created` FROM dcfsda_table WHERE click IS NOT NULL;
SELECT `id`, `title`, `describle` FROM bnsdh_table WHERE describle IS NOT NULL;

IS NULL vs = NULL:關鍵差異

這是新手最常犯的錯誤。 在 SQL 中,NULL 代表「未知值」,NULL = NULL 的結果不是 true,而是 UNKNOWN(在 WHERE 子句中視為 false)。因此:

  • WHERE column = NULL 永遠不會返回任何行。
  • 必須使用 WHERE column IS NULL。

IS NOT NULL 與索引優化的真相

關於 IS NOT NULL 能否使用索引,網上流傳著「不能用索引」的說法,這並不準確。優化器的決策取決於具體的數據分佈和表結構:

  • 如果非 NULL 值佔絕大多數(如 1025014 行中只有 1 行是 NULL),優化器可能選擇全表掃描,因為走索引反而需要回表,成本更高。
  • 如果非 NULL 值較少,優化器則會利用索引快速定位。

「改寫為 click > 0 AND click < 100001」這類強制走索引的做法,只有在明確知道數據範圍且選擇性極高時才有效,否則屬於過早優化。

核心總結

  1. 判斷 NULL 永遠使用 IS NULL / IS NOT NULL。
  2. ISNULL(expr) 函數在 MySQL 中僅返回 1 或 0,不建議用於 WHERE 子句過濾。
  3. 索引能否用於 IS [NOT] NULL 取決於代價模型,而非絕對規則。
  4. 使用 EXPLAIN 分析實際執行計劃,才是優化的正確路徑。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved