CREATE XML INDEX (Transact-SQL)
Создает XML-индекс по заданной таблице. Индекс может быть создан до появления данных в таблице. XML-индексы можно создавать на основе таблиц другой базы данных — для этого нужно указать полное имя базы данных.
Примечание |
---|
О создании реляционного индекса см. в разделе CREATE INDEX (Transact-SQL). Дополнительные сведения о создании пространственного индекса см. в разделе CREATE SPATIAL INDEX (Transact-SQL). |
Синтаксис
Create XML Index
CREATE [ PRIMARY ] XML INDEX index_name
ON <object> ( xml_column_name )
[ USING XML INDEX xml_index_name
[ FOR { VALUE | PATH | PROPERTY } ] ]
[ WITH ( <xml_index_option> [ ,...n ] ) ]
[ ; ]
<object> ::=
{
[ database_name. [ schema_name ] . | schema_name. ]
table_name
}
<xml_index_option> ::=
{
PAD_INDEX = { ON | OFF }
| FILLFACTOR = fillfactor
| SORT_IN_TEMPDB = { ON | OFF }
| IGNORE_DUP_KEY = OFF
| DROP_EXISTING = { ON | OFF }
| ONLINE = OFF
| ALLOW_ROW_LOCKS = { ON | OFF }
| ALLOW_PAGE_LOCKS = { ON | OFF }
| MAXDOP = max_degree_of_parallelism
}
Аргументы
[PRIMARY] XML
Создает XML-индекс по заданному столбцу типа xml. Если присутствует ключевое слово PRIMARY, создается кластеризованный индекс с ключом, образованным из ключа кластеризации таблицы пользователя и идентификатора XML-узла. Для каждой таблицы можно создать до 249 XML-индексов. При создании XML-индекса помните следующее.Кластеризованный индекс должен существовать для первичного ключа таблицы пользователя.
Максимальное количество столбцов в ключе кластеризации таблицы пользователя — 15.
У каждого столбца типа xml в таблице может быть один первичный XML-индекс и несколько вторичных.
Чтобы создать вторичный XML-индекс для столбца типа xml, первичный XML-индекс для этого столбца уже должен существовать.
XML-индекс может быть создан только для одного столбца типа xml. Невозможно создать XML-индекс для столбца, не относящегося к типу xml, а также реляционный индекс для столбца типа xml.
Невозможно создать первичный или вторичный XML-индекс для столбца типа xml в представлении для переменной со столбцами типа xml, возвращающей табличное значение, или для переменных типа xml.
Невозможно создать первичный XML-индекс для вычисляемого столбца типа xml.
Значения параметров SET должны быть теми же, что и для индексированных представлений и индексов вычисляемых столбцов. В частности, параметр ARITHABORT должен быть в значении ON, если создается XML-индекс и если выполняется вставка, удаление или обновление значений в столбце типа xml. Дополнительные сведения см. в разделе Параметры SET, влияющие на результаты.
Дополнительные сведения см. в разделе Индексы для столбцов типа данных xml.
index_name
Имя индекса. Имена индексов должны быть уникальными в пределах таблицы, но не обязательно должны быть уникальными в пределах базы данных. Имена индексов должны удовлетворять правилам для идентификаторов.Имена первичных XML-индексов не должны начинаться со следующих символов: #, ##, @ или @@.
xml_column_name
Столбец типа xml, на котором основан индекс. В одном определении XML-индекса может быть задан только один столбец типа xml, но для одного столбца типа xml можно создать несколько вторичных XML-индексов.USING XML INDEX xml_index_name
Указывает первичный XML-индекс, который должен использоваться при создании вторичного XML-индекса.FOR { VALUE | PATH | PROPERTY }
Указывает тип вторичного XML-индекса.VALUE
Создает вторичный XML-индекс для столбцов, где ключевые столбцы (значение узла и путь) входят в первичный XML-индекс.PATH
Создает вторичный XML-индекс для столбцов, построенных на основе значений путей и узлов в первичном XML-индексе. Во вторичном индексе типа PATH значениями путей и узлов являются ключевые столбцы, обеспечивающие эффективный поиск путей.PROPERTY
Создает вторичный XML-индекс по столбцам первичного XML-индекса (PK, путь и узел), где PK — первичный ключ базовой таблицы.
<object>::=
Полное или неполное имя индексируемого объекта.
database_name
Имя базы данных.schema_name
Имя схемы, которой принадлежит таблица.table_name
Имя таблицы для индексирования.
<xml_index_option> ::=
Указывает параметры, которые должны использоваться при создании индекса.
PAD_INDEX = { ON | OFF }
Определяет разреженность индекса. Значение по умолчанию — OFF.ON
Процент свободного места, определяемый аргументом fillfactor, применяется к страницам индекса промежуточного уровня.OFF или fillfactor не указан
Страницы промежуточного уровня заполняются почти полностью, при этом остается достаточно места по крайней мере для одной строки максимального размера, возможного в этом индексе при заданном наборе ключей на промежуточных страницах.
Параметр PAD_INDEX имеет смысл только в случае, если указан параметр FILLFACTOR, так как использует процентное значение, указанное в нем. Если процент, заданный аргументом FILLFACTOR, недостаточно велик для размещения одной строки, компонент Database Engine внутренне переопределит это значение, чтобы обеспечить минимум. Количество строк на странице индекса промежуточного уровня никогда не бывает менее двух даже при самых малых значениях аргумента fillfactor.
FILLFACTOR **=**fillfactor
Указывает значение в процентах, показывающее, насколько полным компонент Database Engine должен сделать конечный уровень каждой страницы индекса во время создания или перестроения индекса. Параметр fillfactor должен быть целым числом от 1 до 100. Значение по умолчанию равно 0. Если параметр fillfactor равен 100 или 0, компонент Database Engine создает индексы с полностью заполненными страницами конечного уровня.Примечание Значения коэффициентов заполнения 0 и 100 идентичны.
Аргумент FILLFACTOR действует только при создании или перестройке индекса. Компонент Database Engine не сохраняет динамически указанный процентный объем свободного места на страницах. Значение коэффициента заполнения можно увидеть в представлении каталога sys.indexes.
Важно! Создание кластеризованного индекса с аргументом FILLFACTOR меньше 100 влияет на объем пространства хранения, занимаемого данными, т. к. компонент Database Engine перераспределяет данные, когда создает кластеризованный индекс.
Дополнительные сведения см. в разделе Коэффициент заполнения.
SORT_IN_TEMPDB = { ON | OFF }
Указывает, сохранять ли временные результаты сортировки в базе данных tempdb. Значение по умолчанию — OFF.ON
Промежуточные результаты сортировки, которые используются при индексировании, хранятся в базе данных tempdb. Это может уменьшить время, необходимое для создания индекса, если база данных tempdb и база данных пользователя находятся на разных наборах дисков. Однако это увеличивает использование места на диске, которое используется при индексировании.OFF
Промежуточные результаты сортировки хранятся в той же базе данных, где и индекс.
Кроме места в базе данных пользователя, необходимого для создания индекса, требуется примерно столько же дополнительного места в базе данных tempdb для хранения промежуточных результатов сортировки. Дополнительные сведения см. в разделе База данных tempdb и создание индекса.
IGNORE_DUP_KEY **=**OFF
Не влияет на XML-индексы, поскольку этот тип индекса никогда не уникален. Не устанавливайте этот параметр в значение ON, иначе произойдет ошибка.DROP_EXISTING = { ON | OFF }
Указывает, что именованный существующий XML-индекс удален и перестраивается. Значение по умолчанию — OFF.ON
Существующий индекс удаляется и перестраивается. Указанное имя индекса должно совпадать с уже существующим индексом, но определение индекса может быть изменено. Например, можно указать другие столбцы, порядок сортировки, схему секционирования или параметры индекса.OFF
Выдается ошибка, если индекс с указанным именем уже существует.
Тип индекса не может быть изменен с помощью аргумента DROP_EXISTING. Кроме того, первичный XML-индекс не может быть переопределен как вторичный XML-индекс и наоборот.
ONLINE **=**OFF
Указывает, что базовые таблицы и связанные индексы будут недоступны для запросов и изменения данных во время операций с индексами. В этой версии SQL Server не разрешено применять построение индекса в сети для XML-индексов. Если этому параметру присвоено значение ON для XML-индекса, то возникает ошибка. Не указывайте параметр ONLINE или установите его в значение OFF.Операция вне сети с индексами, в ходе которой создается, перестраивается или удаляется XML-индекс, получает блокировку изменения схемы для таблицы. Это предотвращает доступ к базовой таблице всех пользователей во время операции.
Примечание Операции с индексами в сети доступны только в выпусках SQL Server Enterprise, Developer и Evaluation.
ALLOW_ROW_LOCKS = { ON | OFF }
Указывает, разрешена ли блокировка строк. Значение по умолчанию — ON.ON
Блокировки строк допустимы при доступе к индексу. Необходимость в блокировке строк определяет компонент Database Engine.OFF
Блокировки строк не используются.
ALLOW_PAGE_LOCKS = { ON | OFF }
Указывает, разрешена ли блокировка страниц. Значение по умолчанию — ON.ON
Блокировки страниц возможны при доступе к индексу. Необходимость в блокировке страниц определяет компонент Database Engine.OFF
Блокировки страниц не используются.
MAXDOP **=**max_degree_of_parallelism
Переопределяет параметр конфигурации максимальная степень параллелизма на время операций с индексами. MAXDOP можно использовать для ограничения числа процессоров, используемых при параллельном выполнении планов. Максимальное число процессоров — 64.Важно! Несмотря на синтаксическую поддержку параметра MAXDOP для всех XML-индексов, инструкция CREATE XML INDEX использует только один процессор для первичного XML-индекса.
Параметр конфигурации max_degree_of_parallelism может иметь следующие значения.
1
Подавляет создание параллельных планов.>1
Ограничивает максимальное количество процессоров, используемых в параллельных операциях с индексами, заданным или меньшим числом в зависимости от текущей рабочей нагрузки системы.0 (по умолчанию)
В зависимости от текущей рабочей нагрузки системы использует реальное или меньшее число процессоров.
Дополнительные сведения см. в разделе Настройка параллельных операций с индексами.
Примечание Параллельные операции с индексами доступны только в выпусках SQL Server Enterprise, Developer и Evaluation.
Замечания
Вычисляемые столбцы, производные от типов данных xml, могут быть проиндексированы или как ключевые, или как неключевые столбцы, если тип данных вычисляемого столбца может быть использован в качестве столбца ключа индекса или неключевого столбца. Невозможно создать первичный XML-индекс для вычисляемого столбца типа xml.
Для просмотра сведений об XML-индексах можно воспользоваться представлением каталога sys.xml_indexes.
Дополнительные сведения об XML-индексах см. в разделе Индексы для столбцов типа данных xml.
Дополнительные сведения о создании индексов
Дополнительные сведения о создании индексов см. в разделе «Примечания» в CREATE INDEX (Transact-SQL).
Примеры
А. Создание первичного XML-индекса
В следующем примере создается первичный XML-индекс по столбцу CatalogDescription таблицы Production.ProductModel.
USE AdventureWorks2008R2;
GO
IF EXISTS (SELECT * FROM sys.indexes
WHERE name = N'PXML_ProductModel_CatalogDescription')
DROP INDEX PXML_ProductModel_CatalogDescription
ON Production.ProductModel;
GO
CREATE PRIMARY XML INDEX PXML_ProductModel_CatalogDescription
ON Production.ProductModel (CatalogDescription);
GO
Б. Создание вторичного XML-индекса
В следующем примере создается вторичный XML-индекс по столбцу CatalogDescription таблицы Production.ProductModel.
USE AdventureWorks2008R2;
GO
IF EXISTS (SELECT name FROM sys.indexes
WHERE name = N'IXML_ProductModel_CatalogDescription_Path')
DROP INDEX IXML_ProductModel_CatalogDescription_Path
ON Production.ProductModel;
GO
CREATE XML INDEX IXML_ProductModel_CatalogDescription_Path
ON Production.ProductModel (CatalogDescription)
USING XML INDEX PXML_ProductModel_CatalogDescription FOR PATH ;
GO
См. также