В этом учебном пособии вы узнаете, как создавать, переименовывать и удалять индексы в SQL Server с синтаксисом и примерами.
Описание
Индекс - это способ настройки производительности, позволяющий быстрее извлекать записи. Индекс создает запись для каждого значения, которое появляется в индексированных столбцах.
Создать индекс
Синтаксис
Синтаксис создания индекса в SQL Server (Transact-SQL):
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).
Например:
1 2 |
CREATE INDEX contacts_idx ON contacts (last_name); |
В этом примере мы создали индекс в таблице contacts, называемый contact_idx. Он состоит только из одного поля - поля last_name.
Мы могли бы также создать индекс с более чем одним полем, как в приведенном ниже примере:
1 2 |
CREATE INDEX contacts_idx ON contacts (last_name, first_name); |
В этом примере мы создали индекс с именем contacts_idx в таблице contacts, но на этот раз он состоит из полей last_name и first_name.
Поскольку мы не указали ASC | DESC для каждого из столбцов, индекс создается с каждым из полей в порядке возрастания. Мы могли бы изменить наш пример и изменить порядок сортировки на убывание следующим образом:
1 2 |
CREATE INDEX contacts_idx ON contacts (last_name DESC, first_name DESC); |
Этот пример CREATE INDEX создает индекс contacts_idx с last_name, отсортированным по убыванию, и first_name отсортированным в порядке убывания.
Пример UNIQUE Index
Далее рассмотрим пример создания уникального индекса в SQL Server (Transact-SQL).
Например:
1 2 |
CREATE UNIQUE INDEX contacts_uidx ON contacts (last_name, first_name); |
В этом примере создается индекс contacts_uidx в таблице contacts, который состоит из полей last_name и first_name, но также гарантирует, что существуют только уникальные комбинации этих двух полей.
Вы можете изменить этот пример далее, чтобы сделать уникальный индекс также кластеризованным, чтобы физический порядок строк в таблице определялся логическим порядком индекса. Например:
1 2 |
CREATE UNIQUE CLUSTERED INDEX contacts_uidx ON contacts (last_name, first_name); |
В этом примере создается индекс, называемый contacts_uidx, который является уникальным индексом на основе полей last_name и first_name, а также индексируется кластер, который изменяет физический порядок строк в таблице.
Переименование индекса
Синтаксис
Синтаксис переименования индекса в SQL Server (Transact-SQL):
table_name - имя таблицы, в которой был создан индекс.
old_index_name - имя индекса, который вы хотите переименовать.
new_index_name - новое имя для индекса.
Пример
1 |
sp_rename 'contacts.contacts_idx', 'contacts_index_cname', 'INDEX'; |
В этом примере мы переименовываем индекс в таблице contacts с именем contacts_idx в contacts_index_cname.
Удалить индекс
Синтаксис
Синтаксис удаления индекса в SQL Server:
table_name - имя таблицы, в которой был создан индекс.
index_name - имя индекса для удаления.
Пример
Рассмотрим пример того, как удалить индекс в SQL Server (Transact-SQL).
Например:
1 |
DROP INDEX contacts.contacts_idx; |
В этом примере мы удаляем индекс, называемый contacts_idx.