暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在Oracle中,如何知道哪些外键未创建索引?

DB宝 2017-06-18
1312


Q
题目如下所示:

在Oracle中,如何知道哪些外键未创建索引


     

A
答案如下所示:


可以通过如下的SQL语句来查询到哪些外键未创建索引:

SELECT OWNER,

       TABLE_NAME,

       CONSTRAINT_NAME,

       CNAME1 || NVL2(CNAME2, ',' || CNAME2, NULL) ||

       NVL2(CNAME3, ',' || CNAME3, NULL) ||

       NVL2(CNAME4, ',' || CNAME4, NULL) ||

       NVL2(CNAME5, ',' || CNAME5, NULL) ||

       NVL2(CNAME6, ',' || CNAME6, NULL) ||

       NVL2(CNAME7, ',' || CNAME7, NULL) ||

       NVL2(CNAME8, ',' || CNAME8, NULL) COLUMNS

  FROM (SELECT B.OWNER,

               B.TABLE_NAME,

               B.CONSTRAINT_NAME,

               MAX(DECODE(POSITION, 1, COLUMN_NAME, NULL)) CNAME1,

               MAX(DECODE(POSITION, 2, COLUMN_NAME, NULL)) CNAME2,

               MAX(DECODE(POSITION, 3, COLUMN_NAME, NULL)) CNAME3,

               MAX(DECODE(POSITION, 4, COLUMN_NAME, NULL)) CNAME4,

               MAX(DECODE(POSITION, 5, COLUMN_NAME, NULL)) CNAME5,

               MAX(DECODE(POSITION, 6, COLUMN_NAME, NULL)) CNAME6,

               MAX(DECODE(POSITION, 7, COLUMN_NAME, NULL)) CNAME7,

               MAX(DECODE(POSITION, 8, COLUMN_NAME, NULL)) CNAME8,

               COUNT(*) COL_CNT

          FROM (SELECT SUBSTR(TABLE_NAME, 1, 30) TABLE_NAME,

                       SUBSTR(CONSTRAINT_NAME, 1, 30) CONSTRAINT_NAME,

                       SUBSTR(COLUMN_NAME, 1, 30) COLUMN_NAME,

                       POSITION

                  FROM DBA_CONS_COLUMNS

                 WHERE OWNER NOT IN

                       ('XDB', 'APEX_030200', 'DBSNMP', 'ORDDATA','DB_MONITOR','LHR','SH') 

                   AND  OWNER NOT LIKE '%SYS%') A,

               DBA_CONSTRAINTS B

         WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME

           AND  B.CONSTRAINT_TYPE = 'R'

           AND  B.OWNER NOT IN ('XDB', 'APEX_030200', 'DBSNMP', 'ORDDATA','DB_MONITOR','LHR','SH')

           AND  B.OWNER NOT LIKE '%SYS%'

         GROUP BY B.OWNER, B.TABLE_NAME, B.CONSTRAINT_NAME) CONS

 WHERE COL_CNT > ALL (SELECT COUNT(*)

          FROM DBA_IND_COLUMNS I

         WHERE I.TABLE_NAME = CONS.TABLE_NAME

           AND  I.COLUMN_NAME IN (CNAME1,

                                 CNAME2,

                                 CNAME3,

                                 CNAME4,

                                 CNAME5,

                                 CNAME6,

                                 CNAME7,

                                 CNAME8)

           AND  I.COLUMN_POSITION <= CONS.COL_CNT

           AND  I.INDEX_OWNER NOT IN

               ('XDB', 'APEX_030200', 'DBSNMP', 'ORDDATA','DB_MONITOR','LHR','SH')

           AND  INDEX_OWNER NOT LIKE '%SYS%'

         GROUP BY I.INDEX_NAME);


DB笔试面试历史连接

http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w

About Me:小麦苗

 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

 版权所有,欢迎分享本文,转载请保留出处

 QQ:646634621  QQ群:230161599

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。

最后修改时间:2020-01-10 21:12:17
文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论