優化索引的規則如下:
if 乙個表中有兩個索引 ( i1 and i2 ) and
i1索引所涉及的列數<=i2索引所涉及的列數 and
i1索引中列的順序與i2索引中列的順序相同
then
if i1索引是 unique then
if i2索引是乙個外來鍵的參考列 then
do nothing
else
刪除i2
end if
else
刪除i1
end if
end if
用下面的語句查詢出scott模式下面重複的索引:
conn sys/sys as sysdba
select
/*+ rule */
tab_owner.name owner, t.name table_name,
o1.name || '(' || decode(bitand(i1.property, 1), 0, 'n', 1, 'u', '*') || ')' included_index_name ,
o2.name || '(' || decode(bitand(i2.property, 1), 0, 'n', 1, 'u', '*') || ')' including_index_name
from sys.user$ tab_owner, sys.obj$ t, sys.ind$ i1, sys.obj$ o1, sys.ind$ i2, sys.obj$ o2
where i1.bo# = i2.bo# and i1.obj# <> i2.obj# and i2.cols >= i1.cols and i1.cols > 0 and
i1.cols = ( select /*+ ordered */ count(1) from sys.icol$ cc1, sys.icol$ cc2
where cc2.obj# = i2.obj# and cc1.obj# = i1.obj# and
cc2.pos# = cc1.pos# and cc2.col# = cc1.col#) and
i1.obj# = o1.obj# and i2.obj# = o2.obj# and t.obj# = i1.bo# and
t.owner# = tab_owner.user# and tab_owner.name like 'scott'
order by 1, 2
owner table_name
—————————— ——————————
included_index_name including_index_name
——————————— ———————————
scott emp
emp_ln emp_ln_fn
Oracle索引優化規則
索引優化規則 1.like件中不要以萬用字元 wildcard 開始,否則索引將不被採用.例 select lodging from lodging where manager like hanman 2.避免在索引列上使用計算或改變索引列的型別或使用 及 例 select from dept wh...
索引優化及規則
索引建立規則 1 表的主鍵 外來鍵必須有索引 2 資料量超過一定量的表應該有索引 3 經常與其他表進行連線的表,在連線欄位上應該建立索引 4 經常出現在where子句中的字段,特別是大表的字段,應該建立索引 5 索引應該建在選擇性高的字段上 6 索引應該建在小字段上,對於大的文字字段甚至超長字段,不...
Oracle 建立索引的基本規則總結
一 b tree索引 1.選擇索引欄位的原則 2.選擇建立復合索引 復合索引的優點 什麼情況下優化器會用到復合索引呢?a 當sql語句的where子句中有用到復合索引的領導欄位時,oracle優化器會考慮用到復合索引來訪問.b 當某幾個欄位在sql語句的where子句中經常通過and操作符聯合在一起...