当前位置:  开发笔记 > 数据库 > 正文

如何检测Oracle中的表上是否存在特定列的索引?

如何解决《如何检测Oracle中的表上是否存在特定列的索引?》经验,为你挑选了1个好方法。

存在其他人加载的表.我需要查询表,但缺少索引会使查询计划变得糟糕.我想要做的是检测是否有特定列的索引,以便我可以创建它(如果它不存在),如果它已经存在则不创建它.

谢谢.

邪恶



1> Justin Cave..:

你可以查询DBA_/ALL_/USER_IND_COLUMNS,即

SQL> SELECT index_name
  2    FROM dba_ind_columns
  3   WHERE table_owner = 'SCOTT'
  4     AND table_name  = 'EMP'
  5     AND column_name = 'EMPNO';

INDEX_NAME
------------------------------
PK_EMP

当然,您可能希望稍微扩展一下查询.这将获取EMPNO列出现的任何索引.您可能希望将自己限制为列是索引的前导列(COLUMN_POSITION= 1)的索引.或者您可能希望将自己限制在该特定列上的索引(以便COLUMN_POSITION2中没有列),即

SQL> ed
Wrote file afiedt.buf

  1  SELECT index_name
  2    FROM dba_ind_columns a
  3   WHERE table_owner = 'SCOTT'
  4     AND table_name  = 'EMP'
  5     AND column_name = 'EMPNO'
  6     AND column_position = 1
  7     AND NOT EXISTS( SELECT 1
  8                       FROM dba_ind_columns b
  9                      WHERE a.index_owner = b.index_owner
 10                        AND a.index_name  = b.index_name
 11*                       AND b.column_position = 2)
SQL> /

INDEX_NAME
------------------------------
PK_EMP

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有