oracle高效sql語句原則
良好的sql語句風格易於發現問題、易於閱讀,移植性好。80%的效能問題是由不良sql語句引發的。
1.盡可能對查詢條件的列建立索引;
2.盡量不要在where條件中對查詢列使用函式,除非建立了相應的函式索引,如可用帶前導字元的like代替substr;
3.任何在where子句中使用is null或is not null的語句優化器是不允許使用索引的;
4.對於有聯接的列,即使最後的聯接值為乙個靜態值,優化器是不會使用索引的;
5.萬用字元(%)在搜尋詞首出現,所以oracle系統不使用索引;
6.任何在order by語句的非索引項或者有計算表示式都將降低查詢速度;
7.如果要使用not,則應在取反的短語前面加上括號,並在短語前面加上not運算子,用not就不能用索引,盡量用「< or >」代替「<>」;
8.in和exists,絕大多數情況下exists比in效能高,加上not也一樣;
9.where子句中要將值和列的型別匹配,如數字和字元間,否則將導致全表掃瞄;
10.不要在應用程式中使用關聯子查詢,可使用聯機檢視來代替;
11.對於帶有很多or的非常複雜查詢,可以考慮用union all來重寫;
12.可批量完成的操作不應該由迴圈方式來進行;
13.用格式一致的sql語句,包括字母的大小寫、標點符號、換行的位置等都要一致,以減少sql分析編譯開銷;
14.游標、動態sql語句盡量用繫結變數方式呼叫,以減少sql分析編譯開銷;
15.在可能產生異常的地方用異常處理;
16.把一些常用功能模組用函式或儲存過程封裝;
1.需要平衡query合dml的需要,常用於(子)查詢的表應建立索引;
2.把索引建到不同的表空間中;
3.用統一的extent大小: 五個block的倍數或者tablespace指定的minimum extent的倍數;
4.建立索引考慮用nologging引數,重建索引的時候也一樣;
5.建立索引時initrans值應該比相應的table的值高一些;
6.對常用sql語句的where條件中的列建立唯一索引或組合索引,組合條件查詢中相應的組合索引更有效;
7.對於組合索引,根據列的唯一值概率,安排索引順序;
8.如果乙個列具有很低的資料基數,並且或者可具有空值,不應作為索引列;
9.如果where語句中不得不對查詢列採用函式查詢,如upper函式,最好建立相應函式索引;
10.對於低基數集的列,幷包含or等邏輯運算,考慮用bitmap索引,對於從大量行的表中返回大量的行時也可以考慮bitmap索引;
11.避免在有大量併發dml運算的表中使用bitmap索引;
oracle 排序分頁 高效sql語句
最好還是利用分析函式row number over partition by col1 order by col2 比如想取出100 150條記錄,按照tname排序 select tname,tabtype from select tname,tabtype,row number over ord...
SQL優化之高效SQL語句
一 sql語句的執行步驟 from子句組裝來自不同資料來源的資料 from後面的表關聯,是自右向左解析的,即在寫sql的時候,盡量把資料量大的表放在最右邊來進行關聯 where子句基於指定的條件對記錄行進行篩選 where條件的解析順序是自下而上,從右到左的,即應把能篩選出大量資料的條件放在wher...
Oracle中的SQL語句效能調整原則
一 問題的提出 在應用系統開發初期,由於開發資料庫資料比較少,對於查詢sql語句,複雜檢視的的編寫等體會不出sql語句各種寫法的效能優劣,但是如果將應用系統提交實際應用後,隨著資料庫中資料的增加,系統的響應速度就成為目前系統需要解決的最主要的問題之一。系統優化中乙個很重要的方面就是sql語句的優化。...