標籤:and sel 使用 內容 union 交集 HERE 全表掃描 整數
1.避免 欄位 值為null ,盡量賦予預設值, 整數: 0 , 小數:0 , 字元: ‘‘
null值 無法 加入索引, 查詢 null值時 無法 啟用索引, 全表掃描
(個別特殊 需求下, 表中仍需要 null值)
2.盡量避免使用 不等於 : != 或 <>
不等 條件 無法 利用索引 進行檢索 , 逐行掃表
(某些情境下, 不等條件 可能 無法避免)
3. 盡量避免使用 or 串連條件 , or 導致 掃描全表
替代方案 : union all
(1)union all : 將兩個查詢結果 聯合 成 一個 查詢結果集
查詢語句1
union all
查詢語句2 ;
注意: 兩個查詢語句 查詢的 欄位要一致
union all 只是 簡單機械地將 兩個結果集 合并成一個結果集 , 不會做去重
(2)union : 將兩個 查詢結果集 合并成 一個 查詢結果集, 並去重(!!!!!!!)
(3)intersect : 擷取 兩個查詢結果集的 交集 (union all 相當於並集)
查詢語句1
intersect
查詢語句2 ;
(4)minus(差集,減集)
查詢語句1
minus
查詢語句2 ;
第一個查詢結果集 減去 第二個查詢結果集
注意: 如果 第一個結果集 的內容 完全被 第二個結果集 包含, 則 差集結果 為 空
4. 慎用 in 和 not in , 會導致 全表掃描
如果 in中為連續數值, 可以用 between and 替代
5. 盡量在 where 子句中 少用 函數處理
6. 在業務 能夠 滿足的情況下, 少用 like 模糊尋找 (實際項目中 很難避免 )
7. where 子句中, 盡量 避免 對 欄位進行 算術運算 , 可以將欄位的算術運算 轉換為 條件值的運算 ,或直接 將運算結果寫入sql
8. 子查詢中, exists 效能高於 in
9. 索引 不要過多, 以免 增加 資料庫資料改變時, 頻發維護索引目錄 造成的 負擔
10. select 子句中 不要使用 "*" , 練習測試時可以用
SQL最佳化的方式