1、盡量少用in操作符,基本上所有的in操作符都可以用exists代替。
2、不用not in操作符,可以用not exists或者外連線+(外連線+判斷為空)替代。 3、不用「<>」或者「!=」操作符。對不等於操作符的處理會造成全表掃瞄,可以用「<」 or 「>」代替。例如:a<>0 改為 a>0 or a<0,a<>』 』 改為 a>』 』
4、where子句中出現is null或者is not null時,oracle會停止使用索引而執行全表掃瞄。可以考慮在設計表時,對索引列設定為not null。這樣就可以用其他操作來取代判斷null的操作。
5、當萬用字元「%」或者「_」作為查詢字串的第乙個字元時,索引不會被使用,因此一般不要作為第乙個字元出現。
6、對於有連線的列「||」,最後乙個連線列索引會無效。盡量避免連線,可以分開連線或者使用不作用在列上的函式替代。
7、如果索引不是基於函式的,那麼當在where子句中對索引列使用函式時,索引不再起作用。
8、where子句中避免在索引列上使用計算,否則將導致索引失效而進行全表掃瞄。
9、對資料型別不同的列進行比較時,會使索引失效。
10、用「>=」替代「>」。
11、union操作符會對結果進行篩選,消除重複,資料量大的情況下可能會引起磁碟排序。如果不需要刪除重覆記錄,應該使用union all。
12、oracle從下到上處理where子句中多個查詢條件,所以表連線語句應寫在其他where條件前,可以過濾掉最大數量記錄的條件必須寫在where子句的末尾。
13、oracle從右到左處理from子句中的表名,所以在from子句中包含多個表的情況下,將記錄最少的表放在最後。
14、order by語句中的非索引列會降低效能,可以通過新增索引的方式處理。嚴格控制在order by語句中使用表示式。
15、不同區域出現的相同的sql語句,要保證查詢字元完全相同,以利用sga共享池,防止相同的sql語句被多次分析。
16、多利用內部函式提高sql效率。
17、當在sql語句中連線多個表時,使用表的別名,並將之作為每列的字首。這樣可以減少解析時間。
18、根據sql不同設定優化模式的方式,選擇不同的優化策略,通過select /*+all+_rows*/ ……;來設定。可用的hint包括/*+all_rows*/、/*+first_rows*/、/*+choose*/、/*+rule*/ 等一般在sql前加first_rows策略,速度都會提高,特殊情況下改用choose策略。(本策略架構包已經支援)
19、對於大表查詢中的列應盡量避免進行諸如to_char,to_date,to_number等轉換
20、有索引的盡量用索引,有用到索引的條件寫在前面
21、如有可能和有必要就建立一些索引
22、盡量避免進行全表掃瞄,限制條件盡可能多,以便更快搜尋到要查詢的資料
SQL優化策略
下面是再河北優化時候採用的sql優化策略,按照該策略可以使效能有大幅提高,如 4 where 子句中出現is null或者is not null時,oracle會停止使用索引而執行全表掃瞄。可以考慮在設計表時,對索引列設定為notnull。這樣就可以用其他操作來取代判斷null的操作。5 當萬用字元...
SQL 優化策略
1 sql語句盡量用大寫的 因為oracle總是先解析sql語句,把小寫的字母轉換成大寫的再執行。2 使用表的別名 當在sql語句中連線多個表時,盡量使用表的別名並把別名字首於每個列上。這樣一來,就可以減少解析的時間並減少那些由列歧義引起的語法錯誤。3 選擇最有效率的表名順序 只在基於規則的優化器 ...
SQL優化策略
1.給where group by 條件欄位加索引select t.a,t.b,t.c from t where t.e 0 group by t.f2.避免使用 select from 示例 select from table t select t.a,t.b,t.c from table t 3...