Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка SQL(14) (оптимизация).docx
Скачиваний:
62
Добавлен:
17.03.2015
Размер:
452.16 Кб
Скачать

9.4. Операторы создания и удаления индексов.

Поскольку базы данных предназначены для хранения больших объемов информации, эффективность их использования в информационных системах во многом определяется скоростью выборки данных. Для увеличения скорости выборки в БД обычно используют специальную структуру, которая называется индексом. Стандарт языка SQL не предусматривает использование индексов. Но, тем не менее, разработчики СУБД охотно идут на включение средств поддержки индексов в систему, несмотря на то, что наличие индекса увеличивает нагрузку на систему из-за необходимости обновлять его при каждом изменении данных таблицы, поскольку существенное повышение скорости запросов окупает данные затраты.

Операторы создания и удаления индекса имеют следующий формат.

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

CREATE [UNIQUE] [ CLUSTERED | NONCLUSTERED ] INDEX <имя_индекса>

ON <Имя таблицы> (<Имя столбца> [ASC| DESC] [, <Имя столбца> [ASC| DESC] …])

Где

UNIQUE — создает уникальный индекс для таблицы или представления. Уникальным является индекс, в котором не может быть двух строк с одним и тем же значением ключа индекса. Кластеризованный индекс представления должен быть уникальным. Ядро СУБД не позволяет создать уникальный индекс по столбцам, уже содержащим повторяющиеся значения. При попытке создания такого индекса выдается сообщение об ошибке. Прежде чем создавать уникальный индекс по такому столбцу или столбцам, необходимо удалить все повторяющиеся значения. Столбцы, используемые в уникальном индексе, должны иметь свойство NOT NULL, т. к. при создании индекса значения NULL рассматриваются как повторяющиеся.

CLUSTERED — Создает индекс, в котором логический порядок значений ключа определяет физический порядок соответствующих строк в таблице. На нижнем (конечном) уровне такого индекса хранятся действительные строки данных таблицы. Для таблицы или представления в каждый момент времени может существовать только один кластеризованный индекс. Представление с уникальным кластеризованным индексом называется индексированным. Создание уникального кластеризованного индекса физически материализует представление. Уникальный кластеризованный индекс для представления должен быть создан до того, как для этого же представления будут определены какие-либо другие индексы. Создавайте кластеризованные индексы до создания любых некластеризованных. При создании кластеризованного индекса все существующие некластеризованные индексы таблицы перестраиваются. Если аргумент CLUSTERED не указан, создается некластеризованный индекс.

NONCLUSTERED — создание индекса, задающего логическое упорядочение для таблицы. Логический порядок строк в некластеризованном индексе не влияет на их физический порядок. Для каждой таблицы можно создать до 999 некластеризованных индексов, независимо от того, каким образом они создаются: неявно с помощью ограничений PRIMARY KEY и UNIQUE или явно с помощью инструкции CREATE INDEX. Для индексированных представлений некластеризованные индексы могут создаваться только в случае, если уже определен уникальный кластеризованный индекс.

По умолчанию, используется значение NONCLUSTERED.

Удалить индекс:

DROP INDEX <Имя индекса>

Если в операторе CREATE INDEX используется квалификатор UNIQUE, то уникальность значений индекса автоматически поддерживается системой. Для каждого из ключевых столбцов можно указать порядок следования значений: по возрастанию — ASC (используется по умолчанию) и по убыванию — DESC.