Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LektsiiNovye.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.92 Mб
Скачать

Использование t-sql

Используя T-SQL для создания индекса, можно генерировать сценарий для соответствующей команды и запускать его многократно. Можно также модифицировать сценарий создания индекса для создания других индексов. Кроме того, этот метод создания индекса даёт больше гибкости, поскольку доступны большее число параметров. Для создания индекса с помощью T-SQL следует использовать оператор CREATE INDEX. Эта команда имеет следующий синтаксис:

CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX <index_name>

ON < object >

({<column> [ASC|DESC] [,...n] [INCLUDE( <column_name> [ ,...n ])]})

[ WITH <relational_index_option> ]

[ ON { partition_scheme_name ( column_name ) | filegroup_name | default } ] [ ; ]

<object> = { [ database_name. [ schema_name ] . | schema_name. ]

table_or_view_name }

<relational_index_option> = {PAD_INDEX = { ON | OFF } | FILLFACTOR = fillfactor | SORT_IN_TEMPDB={ ON | OFF } | IGNORE_DUP_KEY={ ON | OFF } | STATISTICS_NORECOMPUTE={ ON | OFF } | DROP_EXISTING={ ON | OFF } | ONLINE={ ON | OFF } | ALLOW_ROW_LOCKS={ ON | OFF } | ALLOW_PAGE_LOCKS={ ON | OFF } | MAXDOP=<max_degree_of_parallelism> }

UNIQUE

Создаёт уникальный индекс для таблицы или представления. Уникальным является индекс, в котором не может быть двух строк с одним и тем же значением ключа индекса. Кластеризованный индекс представления должен быть уникальным.

SQL Server не позволяет создать уникальный индекс по столбцам, уже содержащим повторяющиеся значения, даже если параметру IGNORE_DUP_KEY присвоено значение ON. При попытке создания такого индекса будет выдано сообщение об ошибке. Прежде чем создавать уникальный индекс по такому столбцу или столбцам, необходимо удалить все повторяющиеся значения. Столбцы, используемые в уникальном индексе, должны иметь свойство NOT NULL, т. к. при создании индекса значения NULL рассматриваются как повторяющиеся.

CLUSTERED

Создаёт кластерный индекс. Представление с уникальным кластеризованным индексом называется индексированным. Создание уникального кластеризованного индекса физически материализует представление. Уникальный кластеризованный индекс для представления должен быть создан до того, как для этого же представления будут определены какие-либо другие индексы.

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

Если аргумент CLUSTERED не указан, создается некластеризованный индекс. Поскольку конечный уровень кластеризованного индекса и страницы данных  это по определению одно и то же, создание кластеризованного индекса и использование предложения ON <partition_scheme_name> или ON <filegroup_name> приводят к перемещению таблицы из файловой группы, в которой она была создана, в новую схему секционирования или файловую группу. Прежде чем создавать таблицы или индексы в определённых файловых группах, следует проверить, какие группы доступны, и убедиться в том, что в этих группах достаточно свободного места для индекса.

NONCLUSTERED

Создаётся индекс, который задаёт логический порядок таблицы. Логический порядок строк данных в некластеризованном индексе не влияет на их физический порядок. По умолчанию, используется значение NONCLUSTERED.

index_name

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

column

Столбец или столбцы, на которых основан индекс. Можно задать несколько имён столбцов для создания составного индекса по объединенным значениям указанных столбцов. Столбцы, которые должны быть включены в составной индекс, указываются в скобках за аргументом table_or_view_name в порядке сортировки.

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

Столбцы с типами данных для больших объектов ntext, text, varchar(max), nvarchar(max), varbinary(max), xml или image не могут быть ключевыми столбцами для индекса. Кроме того, определение представления не может включать столбцы типов ntext, text и image, даже если они указаны в инструкции CREATE INDEX.

Можно создавать индексы на столбцах с пользовательским типом данных, если этот тип поддерживает двоичное упорядочение. Можно также создавать индексы на вычисляемых столбцах, определённых как вызовы методов для столбцов с пользовательскими типами данных, если эти методы помечены как детерминированные и не выполняют операции доступа к данным.

[ ASC | DESC ]

Определяет сортировку значений заданного столбца индекса: по возрастанию или по убыванию. По умолчанию, используется аргумент ASC.

INCLUDE ( column [ ,... n ] )

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

Максимальное количество включенных неключевых столбцов  1023, минимальное  1.

В списке INCLUDE имена столбцов не могут повторяться и не могут использоваться одновременно как ключевые и неключевые.

Допускаются данные всех типов, кроме text, ntext и image. Индекс должен создаваться или перестраиваться в автономном режиме (ONLINE = OFF), если любой из заданных неключевых столбцов имеет тип данных varchar(max), nvarchar(max) или varbinary(max).

Включенными столбцами могут быть детерминированные вычисляемые столбцы  как точные, так и неточные. Вычисляемые столбцы, производные от типов данных image, ntext, text, varchar(max), nvarchar(max), varbinary(max) и xml, могут включаться как неключевые, если типы данных вычисляемых столбцов приемлем для включения.

ON partition_scheme_name ( column_name )

Задаёт схему секционирования, которая определяет файловые группы соответствующие секциям секционированного индекса. Схема секционирования должна быть уже создана в базе данных с помощью инструкции CREATE PARTITION SCHEME или ALTER PARTITION SCHEME. Аргумент column_name задаёт столбец, по которому будет секционирован индекс. Этот столбец должен соответствовать типу данных, длине и точности аргумента функции секционирования, которую использует схема partition_scheme_name. Аргумент column_name может указывать на столбцы, не входящие в определение индекса. Можно указать любой столбец базовой таблицы, за исключением случая секционирования индекса UNIQUE, когда столбец column_name должен быть выбран из используемых в уникальном ключе. Это ограничение дает возможность SQL Server проверять уникальность значений ключа только в одной секции.

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

ON filegroup_name

Создаёт заданный индекс в указанной файловой группе. Если местоположение не указано и таблица или представление не секционированы, индекс использует ту же файловую группу, что и базовые таблица или представление. Файловая группа уже должна существовать.

ON «default»

Создает заданный индекс в файловой группе, используемой по умолчанию. Слово «default» в этом контексте не является ключевым. Это идентификатор файловой группы, используемой по умолчанию.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]