Indexes SQL Server

В этом учебном пособии вы узнаете, как создавать, переименовывать и удалять индексы в SQL Server с синтаксисом и примерами.

Описание

Индекс - это способ настройки производительности, позволяющий быстрее извлекать записи. Индекс создает запись для каждого значения, которое появляется в индексированных столбцах.

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

Синтаксис

Синтаксис создания индекса в SQL Server (Transact-SQL):

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON table_name ( column1 [ASC | DESC ], ... column_n [ ASC | DESC ] )
[ INCLUDE ( column1, ... column_n ) ]
[ WHERE condition ]
[ WITH ( PAD_INDEX = { ON | OFF }
| FILLFACTOR = fillfactor
| SORT_IN_TEMPDB = { ON | OFF }
| IGNORE_DUP_KEY = { ON | OFF }
| STATISTICS_NORECOMPUTE = { ON | OFF }
| STATISTICS_INCREMENTAL = { ON | OFF }
| DROP_EXISTING = { ON | OFF }
| ONLINE = { ON | OFF }
| ALLOW_ROW_LOCKS = { ON | OFF }
| ALLOW_PAGE_LOCKS = { ON | OFF }
| MAXDOP = max_degree
| DATA_COMPRESSION = { NONE | PAGE | ROW }
[ ON PARTITIONS ( { number | range } ]
[ ON partition_scheme ( column )
| ON filegroup
| ON default_filegroup ]
[ FILESTREAM_ON { filegroup | partition_scheme };

UNIQUE - необязательный. Указывает, что комбинация значений в индексированных столбцах должна быть уникальной.
CLUSTERED - необязательный. Указывает, что логический порядок определяет физический порядок строк в таблице.
NONCLUSTERED - необязательный. Указывает, что логический порядок не определяет физический порядок строк в таблице.
index_name - имя создаваемого индекса.
table_name - имя таблицы или представления, по которой должен быть создан индекс.
column1, ... column_n - столбцы для индекса.
ASC | DESC - порядок сортировки для каждого столбца.
INCLUDE(column1,...column_n) - необязательный. Столбцы, которые не являются ключевыми столбцами для добавления к уровню листа некластеризованного индекса.
WHERE condition - необязательный. Условие для определения, какие строки включать в индекс.
ON partition_scheme ( column ) - необязательный. Указывает, что схема раздела определяет файловые группы, в которых будут отображаться разделы.
ON filegroup - необязательный. Указывает, что индекс будет создан в указанной файловой группе.
ON default_filegroup - необязательный. Указывает файловую группу по умолчанию.
FILESTREAM_ON {filegroup | partition_scheme} - необязательный. Указывает, куда поместить данные FILESTREAM для кластерного индекса.

Пример индекса

Рассмотрим пример создания индекса в SQL Server (Transact-SQL).
Например:

В этом примере мы создали индекс в таблице contacts, называемый contact_idx. Он состоит только из одного поля - поля last_name.

Мы могли бы также создать индекс с более чем одним полем, как в приведенном ниже примере:

В этом примере мы создали индекс с именем contacts_idx в таблице contacts, но на этот раз он состоит из полей last_name и first_name.

Поскольку мы не указали ASC | DESC для каждого из столбцов, индекс создается с каждым из полей в порядке возрастания. Мы могли бы изменить наш пример и изменить порядок сортировки на убывание следующим образом:

Этот пример CREATE INDEX создает индекс contacts_idx с last_name, отсортированным по убыванию, и first_name отсортированным в порядке убывания.

Пример UNIQUE Index

Далее рассмотрим пример создания уникального индекса в SQL Server (Transact-SQL).
Например:

В этом примере создается индекс contacts_uidx в таблице contacts, который состоит из полей last_name и first_name, но также гарантирует, что существуют только уникальные комбинации этих двух полей.

Вы можете изменить этот пример далее, чтобы сделать уникальный индекс также кластеризованным, чтобы физический порядок строк в таблице определялся логическим порядком индекса. Например:

В этом примере создается индекс, называемый contacts_uidx, который является уникальным индексом на основе полей last_name и first_name, а также индексируется кластер, который изменяет физический порядок строк в таблице.

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

Синтаксис

Синтаксис переименования индекса в SQL Server (Transact-SQL):

sp_rename 'table_name.old_index_name', 'new_index_name', 'INDEX';

table_name - имя таблицы, в которой был создан индекс.
old_index_name - имя индекса, который вы хотите переименовать.
new_index_name - новое имя для индекса.

Пример

В этом примере мы переименовываем индекс в таблице contacts с именем contacts_idx в contacts_index_cname.

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

Синтаксис

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

DROP INDEX table_name.index_name;

table_name - имя таблицы, в которой был создан индекс.
index_name - имя индекса для удаления.

Пример

Рассмотрим пример того, как удалить индекс в SQL Server (Transact-SQL).
Например:

В этом примере мы удаляем индекс, называемый contacts_idx.