总结优化索引的规则

优化索引的规则如下:
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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值