總結優化索引的規則

2022-05-09 20:58:52 字數 1494 閱讀 1828

優化索引的規則如下:

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操作符聯合在一起...