存在其他人加載的表。我需要對錶進行查詢,但缺乏索引使查詢計劃變得糟糕透頂。我想要做的是檢測是否存在某個特定列的索引,以便我可以在不存在的情況下創建該索引,如果它已經存在,則不創建它。如何檢測Oracle中某個表上是否存在索引?
謝謝。
邪惡
存在其他人加載的表。我需要對錶進行查詢,但缺乏索引使查詢計劃變得糟糕透頂。我想要做的是檢測是否存在某個特定列的索引,以便我可以在不存在的情況下創建該索引,如果它已經存在,則不創建它。如何檢測Oracle中某個表上是否存在索引?
謝謝。
邪惡
可以查詢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_POSITION
2中沒有列),即
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
熟悉查詢SYS模式:
Select * from sys.all_ind_columns where table_name=:TabName and table_owner=:TabOwner;