數據庫查詢優化-Where子句優化 -SQL優化


1.對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉
及的列上建立索引。
2.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使
用索引而進行全表掃描。
select id from t where num is null-- 可以在num上設置默認值0,確保表中num列沒有
null值,然后這樣查詢:select id from t where num=0
3.應盡量避免在 where 子句中使用!=或<>操作符,否則引擎將放棄使用索引而
進行全表掃描。
4.應盡量避免在 where 子句中使用or 來連接條件,否則將導致引擎放棄使用索
引而進行全表掃描用union all代替。
5.in 和 not in 也要慎用,否則會導致全表掃描,如:
select id from t where num in(1,2,3)-- 對於連續的數值,能用 between 就不要用 in
了:select id from t where num between 1 and 3
6.下面的查詢也將導致全表掃描:select id from t where name like ‘%
李%’若要提高效率,可以考慮全文檢索。
7.如果在 where 子句中使用參數,也會導致全表掃描。因為SQL只有在運行時
才會解析局部變量,但優化程序不能將訪問計划的選擇推遲到運行時;它必須在編譯
時進行選擇。然 而,如果在編譯時建立訪問計划,變量的值還是未知的,因而無法
作為索引選擇的輸入項。如下面語句將進行全表掃描:
select id from t where num=@num-- 可以改為強制查詢使用索引:select id from t
with(index(索引名))where num=@num
8.應盡量避免在 where 子句中對字段進行表達式操作,這將導致引擎放棄使用
索引而進行全表掃描。如:
select id from t where num/2=100-- 應改為:select id from t where num=100*2
9.應盡量避免在where子句中對字段進行函數操作,這將導致引擎放棄使用索引
而進行全表掃描。如:
select id from t where substring(name,1,3)=’abc’-- name以abc開頭的id應改
為:select id from t where name like ‘abc%’
10.不要在 where 子句中的“=”左邊進行函數、算術運算或其他表達式運算,
否則系統將可能無法正確使用索引。


免責聲明!

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



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