1.在從I/O的觀點來看使用索引沒有意義時鼓勵進行全表掃描。
2.如果SQL包含了子查詢,則優化它們。
3.在SQL 語句的where子句的條件中使用not exists來代替not in。
4.使用有前導字段的like運算來代替substr函數。
5.可在適當的地方使用nvl函數。
6.對於帶有許多OR條件的非常復雜的查詢來說,可以考慮用union all重寫。
7.使用合適的索引。
8.如果查詢總是去檢索基於主從表關系的行,則應建立外鍵列的索引。
9.使用組合索引(有兩個或多個列的索引)。
10.考慮使用非唯一索引來支持唯一性約束。
11.當允許使用約束時,考慮使用enable novalidate子句。
12.當where子句的條件中包含低數據基數的列,包含關於這些列的像or、and或not這樣的邏輯運算,或者從有大量行的表中返回大量的行時,應考慮位圖索引。
13.考慮單表散列或索引簇(有賴於應用程序)。
14.要了解帶有視圖的SQL語句。
15.盡可能避免遠程訪問。
16.主動地確定嵌套循環、合並連接或散列連接。
17.在可能的情況下確定並使用數組處理和批處理。
18.如果應用程序包含了許多動態SQL的發生,則考慮使用execute immediate,它的運行比DBMS_SQL更好。
19.對於非常大的表,考慮利用表和索引的分區。
20.如果仍然使用基於規則的優化程序,則構造from子句使得最小的表成為在表的列表中定義的最後一個表。
21.如果需要減少索引建立所花費的時間,可以在會話級將sort_area_size參數更改為一個大值,使得該索引建立的大多數排序在內存中發生。
22.需要不斷的測試所有的查詢。