Oracle索引问题诊断与优化

      为了诊断数据库的索引设计,可利用下面的SQL语句来查看Oracle数据库的index信息。

SELECT  A.OWNER,A.TABLE_OWNER,A.TABLE_NAME,A.INDEX_NAME,A.INDEX_TYPE,

               B.COLUMN_POSITION,  B.COLUMN_NAME,  C.TABLESPACE_NAME,

               A.TABLESPACE_NAME,A.UNIQUENESS

         FROM  DBA_INDEXES  A ,DBA_IND_COLUMNS  B,DBA_TABLES  C 

         WHERE  A.OWNER = UPPER('hr')

                   AND  A.OWNER = B.INDEX_OWNER 

                   AND  A.OWNER=C.OWNER 

                  AND   A.TABLE_NAME  LIKE  UPPER ('DEPARTMENTS')

                  AND   A.TABLE_NAME = B.TABLE_NAME 

                 AND   A.TABLE_NAME = C.TABLE_NAME 

                 AND   A.INDEX_NAME = B.INDEX_NAME 

                   ORDER  BY  A.OWNER ,  A.TABLE_OWNER ,A.TABLE_NAME ,A.INDEX_NAME ,B.COLUMN_POSITION 


    还可以使用下面的SQL语句直接查出某个库中没有建立index的表,分析是否有必要补充建立索引。

SELECT  OWNER,TABLE_NAME  FROM  ALL_TABLES  WHERE  OWNER NOT  IN ('SYS','SYSTEM','OUTLN','DBSNMP')

             AND  OWNER =UPPER('scott')

MINUS 

     SELECT  OWNER ,TABLE_NAME  FROM  ALL_INDEXES  WHERE  OWNER  NOT  IN ('SYS','SYSTEM','OUTLN','DBSNMP')


     一个表可以有几百个索引,但是对于频繁插入和更新表,索引越多系统的CPU,I/O负担就越重;建议每张表不超过5个索引。可用以下SQL语句查询出建立了过量index的表。

    SELECT  OWNER ,TABLE_NAME,COUNT(*)  "count"  FROM ALL_INDEXES 

           WHERE   OWNER NOT  IN('SYS','SYSTEM','OUTLN','DBSNMP')

                     AND  OWNER = UPPER ('hr')

                     GROUP  BY  OWNER ,TABLE_NAME 

                            HAVING COUNT(*) > ('4')

        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值