Oracle/PLSQL: Индексы

Что такое Индекс?

Создание индекса является методом увеличения производительности работы СУБД при извлечению записей. В индексе создается запись для каждого значения, которое появляется в индексируемом столбце. По умочанию, Oracle создает индексы типа B-дерево.

Создание Индекса

Синтаксис создания индекса:

CREATE [UNIQUE] INDEX index_name
  ON table_name (column1, column2, . column_n)
  [ COMPUTE STATISTICS ];

Параметр UNIQUE указывает, что комбинация значений в индексируемых столбцах таблицы должна быть уникальной.

Параметр COMPUTE STATISTICS командует Oracle-у собирать статистику в процессе создания индекса. Эта статистика в последствии используется оптимизатором при выборе «plan of execution» в процессе выполнения SQL-запроса.

Например:

CREATE INDEX supplier_idx
   ON supplier (supplier_name);

В этом примере, мы создали индекс на таблице supplier с именем supplier_idx. Он содержит только одно поле – supplier_name.

Также мы можем создать индексы с большим, чем одно, количеством полей, как в следующем примере:

CREATE INDEX supplier_idx
   ON supplier (supplier_name, city);

Мы также можем включить сбор статистики создав индекс следующим образом:

CREATE INDEX supplier_idx
  ON supplier (supplier_name, city)
  COMPUTE STATISTICS;

Создание Индексов на основе функций

В Oracle, вы не ограничены созданием индексов только на столбцах таблиц. Вы можете создавать индексы основанные на функциях.

Синтаксис создания индекса на основе функции:

CREATE [UNIQUE] INDEX index_name
  ON table_name (function1, function2, . function_n)
  [ COMPUTE STATISTICS ];

Например:

CREATE INDEX supplier_idx
   ON supplier (UPPER(supplier_name));

В этом примере, мы создали индекс основанный на функции uppercase примененной к полю supplier_name.

Однако, чтобы быть уверенным, что Oracle оптимизатор использует этот индекс, когда выполняет ваши SQL-запросы, убедитесь в
том, что значение UPPER(supplier_name) не возращает NULL. Чтобы это проверить, добавьте выражение UPPER(supplier_name) IS NOT NULL в оператор WHERE следующим образом:

SELECT supplier_id, supplier_name, UPPER(supplier_name)
FROM supplier
WHERE UPPER(supplier_name) IS NOT NULL
ORDER BY UPPER(supplier_name);

Переименование Индекса

Синтаксис переименования индекса:

ALTER INDEX index_name
  RENAME TO new_index_name;

Например:

ALTER INDEX supplier_idx
  RENAME TO supplier_index_name;

В этом примере мы переименовали индекс supplier_idx в supplier_index_name.

Сбор статистики по Индексу

Если вы хотите включить сбор статистики по индексу после его создания или хотите обновить статистику,  воспользуйтесь командой
ALTER INDEX.

Синтаксис подключения сбора статистики по индексу:

ALTER INDEX index_name
  REBUILD COMPUTE STATISTICS;

Например:

ALTER INDEX supplier_idx
  REBUILD COMPUTE STATISTICS;

В этом примере, мы собираем статистику для индекса supplier_idx.

Удаление Индекса (Drop an Index)

Синтаксис удаления индекса:

DROP INDEX index_name;

Например:

DROP INDEX supplier_idx;

В этом примере, мы удалили индекс supplier_idx.

Оставить комментарий