Как определить, существует ли индекс для определенного столбца в таблице в Oracle? - PullRequest
5 голосов
/ 21 ноября 2008

Существует таблица, загруженная кем-то другим. Мне нужно выполнить запрос к таблице, но отсутствие индексов делает план запроса ужасным. Я хотел бы определить, существует ли индекс для определенного столбца, чтобы я мог создать его, если он не существует, и не создавать его, если он уже существует.

Спасибо.

Evil

Ответы [ 2 ]

7 голосов
/ 21 ноября 2008

Вы можете запросить 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
1 голос
/ 21 ноября 2008

Ознакомьтесь с запросами к схеме SYS:

Select * from sys.all_ind_columns where table_name=:TabName and table_owner=:TabOwner;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...