?ac米兰俱乐部球员总进球榜

30

11-2013

數據庫查詢優化原則

  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 來連接條件,否則將導致引擎放棄使用索引而進行全表掃描,如:select id from t where num=10 or num=20  可以這樣查詢:select id from t where num=10   union all   select id from t where num=20  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 ‘%abc%’  若要提高效率,可以考慮全文檢索。  7.如果在 where 子句中使用參數,也會導致全表掃描。因為SQL只有在運行時才會解析局部變量,但優化程序不能將訪問計劃的選擇推遲到運行時;它必須在編譯時進行選擇。然而,如果在編譯時建立訪問計劃,變量的值還是未知的,因而無法作為索引選擇的輸入項。如下面語句將進行全表掃描:select id from t [email protected]  可以改為強制查詢使用索引:select id from t with(index(索引名)) [email protected]  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 datediff(day,createdate,’2005-11-30′)=0–‘2005-11-30’生成的id  應改為:select id from t where name like ‘abc%’   select id from t where createdate>=’2005-11-30′ and createdate<’2005-12-1′

該日志 2013年11月30日發表在網絡安全技術分類下, 通告目前不可用,你可以至底部留下評論。
轉載請注明: 數據庫查詢優化原則 | 鄭州計算機學校_鄭州電腦學校_鄭州電腦培訓
总进球世界杯