Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

SQL Server CREATE INDEX

Синтаксис инструкции CREATE INDEX в SQL Server следующий.

CREATE [UNIQUE] [[NON]CLUSTERED] INDEX имя_индекса ON {имя_таблицы | имя_представления} (столбец [ASC | DESC] [, …]) [WITH [PAD_INDEX] [[,] FILLFACTOR=int] [[,] IGNORE_DUP_KEY] [[,] DROP_EXISTING] [[.] STATISTlCS_NORECOMPUTE]] [[,] SORT_IN_TEMPDB]] [ON файловая_группа]

Где:

[NON] CLUSTERED

Параметр контролирует физическое расположение данных таблицы с помощью кластеризованного (CLUSTERED) или некластеризованного (NONCLUSTERED) индекса. Столбцы кластеризованного индекса определяют порядок, в котором физически записываются на диск строки таблицы. Таким образом, если вы создаете отсортированный по возрастанию кластеризованный индекс по столбцу А таблицы Foo, записи будут размещаться на диске в алфавитном порядке по возрастанию. При указании предложения NONCLUSTERED (по умолчанию), если прочие значения опущены, создается вторичный индекс, который содержит только указатели и не влияет на то, как строки таблицы записываются на диск.

ASC | DESC

Параметр определяет, будут ли значения индекса располагаться по возрастанию (ASQ или по убыванию (DESQ. Если предложение опущено, по умолчанию принимается ASC.

WITH

Позволяет указать описание одного или нескольких дополнительных атрибутов индекса.

PADJNDEX

Указывается, сколько пустого места следует оставлять на каждой 8-килобайтной странице индекса в соответствии со значением, указанным в параметре FILLFACTOR.

FILLFACTOR=int

Объявляется процентное значение (int, от 1 до 100), которое для SQL Server определяет, какую часть 8-килобайтной страницы индекса нужно заполнять в момент создания индекса. Параметр полезен для уменьшения конкуренции за ресурсы ввода-вывода и уменьшения дробления страниц при заполнении страницы данными. Если кластеризованный индекс создается с явно определенным значением FILLFACTOR, это может увеличить размер индекса, но в определенных обстоятельствах также может ускорить обработку.

IGNORE_DUP_KEY

Параметр определяет, какие действия выполняются, если в уникальный индекс в ходе операции вставки или обновления помещается дублирующая запись. Если для столбца данный параметр указан, из операции исключается только дублирующая строка. Если значение не установлено, тогда все записи, участвующие в операции (даже недублирующиеся), отбрасываются как дубликаты.

DROPJEXISTING

Удаляются все существующие индексы таблицы, а указанный индекс перестраивается.

STATISTICS_NORECOMPUTE

Параметр запрещает SQL Server производить пересчет статистики. Это может ускорить операцию CREATE INDEX, но также может сделать индекс менее эффективным.

SORTJNJTEMPDB

Все промежуточные результаты, полученные при создании индекса, сохраняются в системной базе данных TEMPDB. Это увеличивает дисковое пространство, необходимое для создания индекса, но может ускорить обработку, если база TEMPDB находится на другом диске, чем таблица и индекс.

ON файловая_группа

Индекс создается в существующей файловой группе. Этот параметр позволяет размещать индексы на указанном жестком диске или устройстве RAID. Команда CREATE CLUSTERED INDEX…ONFILEGROUP позволяет эффективно перенести таблицу в новую файловую группу, поскольку уровень «листьев» кластеризованного индекса будет идентичен реальным страницам данных таблицы.

Платформа SQL Server позволяет создавать уникальные кластеризованные индексы по представлениям, эффективно материализуя представления. Это может значительно ускорить операции по извлечению данных из представления. Как только в представлении будет создан уникальный кластеризованный индекс, появляется возможность добавлять в представление и некластеризованные индексы. Отметьте, что представление должно быть создано с параметром SCHEMABUILDING. Индексированные представления разрешены только в SQL Server 2000 Enterprise Edition, если вы не добавили к представлению указание NOEXPAND. Индексированные представления поддерживают извлечение данных, но не поддерживают их модификацию.

В SQL Server разрешается использовать до 249 некластеризованных индексов (уникальных и неуникальных) на таблицу, а также один индекс первичного ключа. Столбцы индекса не могут относиться к типам данных NTEXT, TEXT или IMAGE. Сцепленные ключи могут содержать до 16 столбцов и/или 900 байт по всем столбцам фиксированной длины.

Платформа SQL Server автоматически делает создание индекса параллельным, в соответствии с конфигурационной опцией max degree of parallelism.

Часто бывает необходимо создавать индексы, охватывающие несколько столбцов, например сцепленные ключи. Вот пример:

CREATE UNIQUE INDEX project2_ind ON housing_construction(project_name, project_date)
WITH PAD_INDEX, FILLFACTOR=80
ON FILEGROUP housing_fg GO

Добавление предложения PADINDEX установка параметра FILLFACTOR в 80 показывает, что платформа должна заполнить страницы индекса и страницы данных на 80%, а не на 100%. В данном примере платформа должна также создать индекс в файловой группе housing_fg, а не в файловой группе, заданной по умолчанию.

Источник