建立測試表 testNull(ID, a, b),插入 ('1','') 與 ('2',NULL) 對比:
NULL + 1 = NULL,任何運算結果皆為 NULL。WHERE col = NULL 永無結果,必須用 IS NULL / IS NOT NULL。COUNT(col) 忽略 NULL,COUNT(*) 計列數。需統計含 NULL 列時用 COUNT(ISNULL(col,''))。WHERE col IN (NULL) 會忽略 NULL 列。ORDER BY col ASC NULL 排最前,DESC 排最後。NULL = NULL 為 False,只能用 IS 判斷。環境:student 表 999,999 列,classInfo 表 100 列。
INNER JOININNER JOINWHERE 隱性連接三者執行計畫完全相同,表順序不影響效能,優化器自動決定最佳連接順序。隱性連接(WHERE)已被標準淘汰,建議統一使用顯性 INNER JOIN。
classInfo (100) JOIN course (小)。classInfo (小) JOIN student (大)。TOP 10000 用 Hash Join,加 ORDER BY 轉 Nested Loops,包子查詢可轉回 Hash Join。結論:INNER JOIN 與 WHERE 效能無差異,關鍵在於統計資訊、索引與查詢模式,優化器自動選擇最佳演算法。
SET STATISTICS IO/TIME ON、SHOWPLAN 分析真實成本。DISTINCT/ORDER BY/GROUP BY 過度使用加重 tempdb 負擔。SELECT INTO 避免 Log,小量用 CREATE TABLE + INSERT 緩和系統表壓力。TRUNCATE TABLE 後 DROP TABLE,減少系統表鎖定時間。