Oracle索引優化規則

2021-06-16 20:11:17 字數 2027 閱讀 9786

索引優化規則:

1. like件中不要以萬用字元(wildcard)開始,否則索引將不被採用.

例:select lodging from lodging

where manager like 『%hanman';

2.避免在索引列上使用計算或改變索引列的型別或使用『!=』及<>

例: select …from dept where sal * 12 > 25000;

select … from emp where emp_type=to_char(123);

select …. where account_name||account_type='amexa';

select …where empno!=8888 ;

3.避免在索引列上使用not .

4.用》=替代》 .

高效: select * from emp where deptno >=4

低效: select * from emp where deptno >3

兩者的區別在於, 前者dbms將直接跳到第乙個dept等於4的記錄而後者將首先定位到deptno=3的記錄並且向前掃瞄到第乙個dept大於3的記錄.

•5.用union替換or (適用於索引列)

• 通常情況下, 用union替換where子句中的or將會起到較好的效果. 對索引列使用or將造成全表掃瞄. 注意, 以上只針對多個索引列有效. 如果有column沒有被索引, 查詢效率可能會因為你沒有選擇o規則r而降低.

在下面的例子中, loc_id 和region上都建有索引.

高效:select loc_id , loc_desc , region

from location

where loc_id = 10

union

select loc_id , loc_desc , region

from location

where region = 「melbourne」

• 低效:

select loc_id , loc_desc , region

from location

where loc_id = 10 or region = 「melbourne」

如果你堅持要用or, 那就需要返回記錄最少的索引列寫在最前面

• 注意:where key1 = 10 (返回最少記錄)

or key2 = 20 (返回最多記錄)

oracle 內部將以上轉換為

where key1 = 10 and((not key1 = 10)and key2 = 20)

6. 避免在索引列上使用is null和is not null

避免在索引中使用任何可以為空的列,oracle將無法使用該索引 .對於單列索引,如果列包含空值,索引中將不存在此記錄. 對於復合索引,如果每個列都為空,索引中同樣不存在此記錄.如果至少有乙個列不為空,則記錄存在於索引中.

(建議:可以給null值的字段設定乙個預設值))

7.    如果索引是建立在多個列上,索引時段需要放在where 條件的第乙個條件(oracle8i之前),oracle8i之後允許跳躍式索引.

8. (可能的話)用union-all 替換union.

union-all就是做簡單的合併,不會進行排序,union先做簡單的合併,然後做進行排序,最後去除重複的記錄。

9.避免使用耗費資源的操作

帶有distinct,union ,minus,intersect,order by的sql語句會啟動sql引擎.

執行耗費資源的排序(sort)功能. distinct需要一次排序操作, 而其他的至少需要執行兩次排序.

例如,乙個union查詢,其中每個查詢都帶有group by子句, group by會觸發嵌入排序(nested sort) ; 這樣, 每個查詢需要執行一次排序, 然後在執行union時, 又乙個唯一排序(sort unique)操作被執行而且它只能在前面的嵌入排序結束後才能開始執行. 嵌入的排序的深度會大大影響查詢的效率.

通常, 帶有union, minus , intersect的sql語句都可以用其他方式重寫.

索引優化及規則

索引建立規則 1 表的主鍵 外來鍵必須有索引 2 資料量超過一定量的表應該有索引 3 經常與其他表進行連線的表,在連線欄位上應該建立索引 4 經常出現在where子句中的字段,特別是大表的字段,應該建立索引 5 索引應該建在選擇性高的字段上 6 索引應該建在小字段上,對於大的文字字段甚至超長字段,不...

oracle 索引,基本規則

建立索引常用的規則如下 1 表的主鍵 外來鍵必須有索引 2 資料量超過300的表應該有索引 3 經常與其他表進行連線的表,在連線欄位上應該建立索引 4 經常出現在where子句中的字段,特別是大表的字段,應該建立索引 5 索引應該建在選擇性高的字段上 6 索引應該建在小字段上,對於大的文字字段甚至超...

Oracle索引使用規則

首先,我們要確定資料庫執行在何種優化模式下,相應的引數是 optimizer mode。可在svrmgrl中執行 show parameter optimizer mode 來檢視。oracle v7以來預設的設定應是 choose 即如果對已分析的表查詢的話選擇cbo,否則選擇rbo。如果該引數設...