Technology and me

// How to find unindexed foreign key with Oracle

All credits to : this post. Here is the script :

SELECT 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.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 user_cons_columns) a,
                 user_constraints b
           WHERE a.constraint_name = b.constraint_name
             AND b.constraint_type = 'R'
        GROUP BY b.table_name, b.constraint_name) cons
 WHERE col_cnt >
          ALL (SELECT   COUNT (*)
                   FROM user_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
               GROUP BY i.index_name)
/

Just a quick addition : all foreign key don't have to be indexed but many do.

Billets similaires

Comments are disabled

RSS Feed
Social ...
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported