索引優化規則:
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。如果該引數設...