CREATE XML INDEX (Transact-SQL)CREATE XML INDEX (Transact-SQL)

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL DatabaseПрименимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database

Создает XML-индекс по заданной таблице.Creates an XML index on a specified table. Индекс может быть создан до появления данных в таблице.An index can be created before there is data in the table. XML-индексы можно создавать на основе таблиц другой базы данных — для этого нужно указать полное имя базы данных.XML indexes can be created on tables in another database by specifying a qualified database name.

Примечание

Чтобы создать реляционный индекс, обратитесь к разделу CREATE INDEX (Transact-SQL).To create a relational index, see CREATE INDEX (Transact-SQL). Дополнительные сведения о создании пространственного индекса см. в разделе CREATE SPATIAL INDEX (Transact-SQL).For information about how to create a spatial index, see CREATE SPATIAL INDEX (Transact-SQL).

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

--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.table_name | schema_name.table_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  
}  

Примечание

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

АргументыArguments

[PRIMARY] XML[PRIMARY] XML
Создает XML-индекс по заданному столбцу XML.Creates an XML index on the specified xml column. Если присутствует ключевое слово PRIMARY, создается кластеризованный индекс с ключом, образованным из ключа кластеризации таблицы пользователя и идентификатора XML-узла.When PRIMARY is specified, a clustered index is created with the clustered key formed from the clustering key of the user table and an XML node identifier. Для каждой таблицы можно создать до 249 XML-индексов.Each table can have up to 249 XML indexes. При создании XML-индекса помните следующее.Note the following when you create an XML index:

  • Кластеризованный индекс должен существовать для первичного ключа таблицы пользователя.A clustered index must exist on the primary key of the user table.

  • Максимальное количество столбцов в ключе кластеризации таблицы пользователя — 15.The clustering key of the user table is limited to 15 columns.

  • У каждого столбца XML в таблице может быть один первичный XML-индекс и несколько вторичных.Each xml column in a table can have one primary XML index and multiple secondary XML indexes.

  • При создании вторичного XML-индекса для столбца XML первичный XML-индекс для этого столбца уже должен существовать.A primary XML index on an xml column must exist before a secondary XML index can be created on the column.

  • Индекс XML можно создать только для одного столбца XML.An XML index can only be created on a single xml column. Невозможно создать XML-индекс для столбца, не относящегося к типу XML, а также реляционный индекс для столбца XML.You cannot create an XML index on a non-xml column, nor can you create a relational index on an xml column.

  • Невозможно создать первичный или вторичный XML-индекс для столбца XML в представлении для переменной со столбцами типа XML, возвращающей табличное значение, или для переменных типа XML.You cannot create an XML index, either primary or secondary, on an xml column in a view, on a table-valued variable with xml columns, or xml type variables.

  • Невозможно создать первичный XML-индекс для вычисляемого столбца XML.You cannot create a primary XML index on a computed xml column.

  • Значения параметров SET должны быть теми же, что и для индексированных представлений и индексов вычисляемых столбцов.The SET option settings must be the same as those required for indexed views and computed column indexes. В частности, при вставке, удалении или обновлении значений в столбце XML необходимо установить значение ON для параметра ARITHABORT.Specifically, the option ARITHABORT must be set to ON when an XML index is created and when inserting, deleting, or updating values in the xml column.

Дополнительные сведения см в разделе XML-индексы (SQL Server).For more information, see XML Indexes (SQL Server).

index_nameindex_name
Имя индекса.Is the name of the index. Имена индексов должны быть уникальными в пределах таблицы, но не обязательно должны быть уникальными в пределах базы данных.Index names must be unique within a table but do not have to be unique within a database. Имена индексов должны удовлетворять правилам для идентификаторов.Index names must follow the rules of identifiers.

Имена первичных XML-индексов не должны начинаться со следующих символов: # , ## , @ или @@ .Primary XML index names cannot start with the following characters: #, ##, @, or @@.

xml_column_namexml_column_name
Столбец XML, на котором основан индекс.Is the xml column on which the index is based. В одном определении XML-индекса может быть задан только один столбец XML, но для одного столбца XML можно создать несколько вторичных XML-индексов.Only one xml column can be specified in a single XML index definition; however, multiple secondary XML indexes can be created on an xml column.

USING XML INDEX имя_индекса_XMLUSING XML INDEX xml_index_name
Указывает первичный XML-индекс, который должен использоваться при создании вторичного XML-индекса.Specifies the primary XML index to use in creating a secondary XML index.

FOR { VALUE | PATH | PROPERTY }FOR { VALUE | PATH | PROPERTY }
Указывает тип вторичного XML-индекса.Specifies the type of secondary XML index.

ЗначениеVALUE
Создает вторичный XML-индекс для столбцов, где ключевые столбцы (значение узла и путь) входят в первичный XML-индекс.Creates a secondary XML index on columns where key columns are (node value and path) of the primary XML index.

PATHPATH
Создает вторичный XML-индекс для столбцов, построенных на основе значений путей и узлов в первичном XML-индексе.Creates a secondary XML index on columns built on path values and node values in the primary XML index. Во вторичном индексе типа PATH значениями путей и узлов являются ключевые столбцы, обеспечивающие эффективный поиск путей.In the PATH secondary index, the path and node values are key columns that allow efficient seeks when searching for paths.

PROPERTYPROPERTY
Создает вторичный XML-индекс по столбцам первичного XML-индекса (PK, путь и узел), где PK — первичный ключ базовой таблицы.Creates a secondary XML index on columns (PK, path and node value) of the primary XML index where PK is the primary key of the base table.

<object>::=<object>::=

Полное или неполное имя индексируемого объекта.Is the fully qualified or nonfully qualified object to be indexed.

database_namedatabase_name
Имя базы данных.Is the name of the database.

schema_nameschema_name
Имя схемы, которой принадлежит таблица.Is the name of the schema to which the table belongs.

table_nametable_name
Имя таблицы для индексирования.Is the name of the table to be indexed.

<xml_index_option> ::=<xml_index_option> ::=

Указывает параметры, которые должны использоваться при создании индекса.Specifies the options to use when you create the index.

PAD_INDEX = { ON | OFF }PAD_INDEX = { ON | OFF }
Определяет разреженность индекса.Specifies index padding. Значение по умолчанию — OFF.The default is OFF.

ONON
Процент свободного места, определяемый параметром fillfactor, применяется к страницам индекса промежуточного уровня.The percentage of free space that is specified by fillfactor is applied to the intermediate-level pages of the index.

OFF или fillfactor не указанOFF or fillfactor is not specified
Страницы промежуточного уровня заполняются почти полностью, при этом остается достаточно места по крайней мере для одной строки максимального размера, возможного в этом индексе при заданном наборе ключей на промежуточных страницах.The intermediate-level pages are filled to near capacity, leaving sufficient space for at least one row of the maximum size the index can have, considering the set of keys on the intermediate pages.

Параметр PAD_INDEX имеет смысл только в случае, если указан параметр FILLFACTOR, так как использует процентное значение, указанное в нем.The PAD_INDEX option is useful only when FILLFACTOR is specified, because PAD_INDEX uses the percentage specified by FILLFACTOR. Если процент, заданный аргументом FILLFACTOR, недостаточно велик для размещения одной строки, компонент Компонент Database EngineDatabase Engine внутренне переопределит это значение, чтобы обеспечить минимум.If the percentage specified for FILLFACTOR is not large enough to allow for one row, the Компонент Database EngineDatabase Engine internally overrides the percentage to allow for the minimum. Количество строк на странице индекса промежуточного уровня никогда не бывает менее двух даже при самых малых значениях аргумента fillfactor.The number of rows on an intermediate index page is never less than two, regardless of how low the value of fillfactor.

FILLFACTOR = fillfactorFILLFACTOR =fillfactor
Определяет величину в процентах, показывающую, насколько компонент Компонент Database EngineDatabase Engine должен заполнять конечный уровень каждой страницы индекса во время его создания или перестроения.Specifies a percentage that indicates how full the Компонент Database EngineDatabase Engine should make the leaf level of each index page during index creation or rebuild. Значение fillfactor должно быть целым числом от 1 до 100.fillfactor must be an integer value from 1 to 100. Значение по умолчанию равно 0.The default is 0. Если параметр fillfactor равен 100 или 0, компонент Компонент Database EngineDatabase Engine создает индексы с полностью заполненными страницами конечного уровня.If fillfactor is 100 or 0, the Компонент Database EngineDatabase Engine creates indexes with leaf pages filled to capacity.

Примечание

Значения коэффициентов заполнения 0 и 100 идентичны.Fill factor values 0 and 100 are the same in all respects.

Аргумент FILLFACTOR действует только при создании или перестройке индекса.The FILLFACTOR setting applies only when the index is created or rebuilt. Компонент Компонент Database EngineDatabase Engine не сохраняет динамически указанный процентный объем свободного места на страницах.The Компонент Database EngineDatabase Engine does not dynamically keep the specified percentage of empty space in the pages. Значение коэффициента заполнения можно увидеть в представлении каталога sys.indexes.To view the fill factor setting, use the sys.indexes catalog view.

Важно!

Создание кластеризованного индекса с аргументом FILLFACTOR меньше 100 влияет на объем пространства хранения, занимаемого данными, т. к. компонент Компонент Database EngineDatabase Engine перераспределяет данные, когда создает кластеризованный индекс.Creating a clustered index with a FILLFACTOR less than 100 affects the amount of storage space the data occupies because the Компонент Database EngineDatabase Engine redistributes the data when it creates the clustered index.

Дополнительные сведения см. в статье Указание коэффициента заполнения для индекса.For more information, see Specify Fill Factor for an Index.

SORT_IN_TEMPDB = { ON | OFF }SORT_IN_TEMPDB = { ON | OFF }
Указывает, сохранять ли временные результаты сортировки в базе данных tempdb.Specifies whether to store temporary sort results in tempdb. Значение по умолчанию — OFF.The default is OFF.

ONON
Промежуточные результаты сортировки, которые используются при индексировании, хранятся в базе данных tempdb.The intermediate sort results that are used to build the index are stored in tempdb. Это может уменьшить время, необходимое для создания индекса, если база данных tempdb и база данных пользователя находятся на разных наборах дисков.This may reduce the time required to create an index if tempdb is on a different set of disks than the user database. Однако это увеличивает использование места на диске, которое используется при индексировании.However, this increases the amount of disk space that is used during the index build.

OFFOFF
Промежуточные результаты сортировки хранятся в той же базе данных, где и индекс.The intermediate sort results are stored in the same database as the index.

Кроме места в базе данных пользователя, необходимого для создания индекса, требуется примерно столько же дополнительного места в базе данных tempdb для хранения промежуточных результатов сортировки.In addition to the space required in the user database to create the index, tempdb must have about the same amount of additional space to hold the intermediate sort results. Дополнительные сведения см. в разделе Параметр SORT_IN_TEMPDB для индексов.For more information, see SORT_IN_TEMPDB Option For Indexes.

IGNORE_DUP_KEY =OFFIGNORE_DUP_KEY =OFF
Не влияет на XML-индексы, поскольку этот тип индекса никогда не уникален.Has no effect for XML indexes because the index type is never unique. Не устанавливайте этот параметр в значение ON, иначе произойдет ошибка.Do not set this option to ON, or else an error is raised.

DROP_EXISTING = { ON | OFF }DROP_EXISTING = { ON | OFF }
Указывает, что именованный существующий XML-индекс удален и перестраивается.Specifies that the named, preexisting XML index is dropped and rebuilt. Значение по умолчанию — OFF.The default is OFF.

ONON
Существующий индекс удаляется и перестраивается.The existing index is dropped and rebuilt. Указанное имя индекса должно совпадать с уже существующим индексом, но определение индекса может быть изменено.The index name specified must be the same as a currently existing index; however, the index definition can be modified. Например, можно указать другие столбцы, порядок сортировки, схему секционирования или параметры индекса.For example, you can specify different columns, sort order, partition scheme, or index options.

OFFOFF
Выдается ошибка, если индекс с указанным именем уже существует.An error is displayed if the specified index name already exists.

Тип индекса не может быть изменен с помощью аргумента DROP_EXISTING.The index type cannot be changed by using DROP_EXISTING. Кроме того, первичный XML-индекс не может быть переопределен как вторичный XML-индекс и наоборот.Also, a primary XML index cannot be redefined as a secondary XML index, or vice versa.

ONLINE =OFFONLINE =OFF
Указывает, что базовые таблицы и связанные индексы будут недоступны для запросов и изменения данных во время операций с индексами.Specifies that underlying tables and associated indexes are not available for queries and data modification during the index operation. В этой версии SQL ServerSQL Server не разрешено применять построение индекса в сети для XML-индексов.In this version of SQL ServerSQL Server, online index builds are not supported for XML indexes. Если этому параметру присвоено значение ON для XML-индекса, то возникает ошибка.If this option is set to ON for a XML index, an error is raised. Не указывайте параметр ONLINE или установите его в значение OFF.Either omit the ONLINE option or set ONLINE to OFF.

Операция вне сети с индексами, в ходе которой создается, перестраивается или удаляется XML-индекс, получает блокировку изменения схемы для таблицы.An offline index operation that creates, rebuilds, or drops a XML index, acquires a Schema modification (Sch-M) lock on the table. Это предотвращает доступ к базовой таблице всех пользователей во время операции.This prevents all user access to the underlying table for the duration of the operation.

Примечание

Операции с индексами в сети доступны не во всех выпусках MicrosoftMicrosoftSQL ServerSQL Server.Online index operations are not available in every edition of MicrosoftMicrosoftSQL ServerSQL Server. Сведения о функциях, поддерживаемых различными выпусками SQL ServerSQL Server, см. в статье Возможности, поддерживаемые различными выпусками SQL Server 2016.For a list of features that are supported by the editions of SQL ServerSQL Server, see Editions and Supported Features for SQL Server 2016.

ALLOW_ROW_LOCKS = { ON | OFF }ALLOW_ROW_LOCKS = { ON | OFF }
Указывает, разрешена ли блокировка строк.Specifies whether row locks are allowed. Значение по умолчанию — ON.The default is ON.

ONON
Блокировки строк допустимы при доступе к индексу.Row locks are allowed when accessing the index. Компонент Компонент Database EngineDatabase Engine определяет, когда используются блокировки строки.The Компонент Database EngineDatabase Engine determines when row locks are used.

OFFOFF
Блокировки строк не используются.Row locks are not used.

ALLOW_PAGE_LOCKS = { ON | OFF }ALLOW_PAGE_LOCKS = { ON | OFF }
Указывает, разрешена ли блокировка страниц.Specifies whether page locks are allowed. Значение по умолчанию — ON.The default is ON.

ONON
Блокировки страниц возможны при доступе к индексу.Page locks are allowed when accessing the index. Компонент Компонент Database EngineDatabase Engine определяет, когда используются блокировки страниц.The Компонент Database EngineDatabase Engine determines when page locks are used.

OFFOFF
Блокировки страниц не используются.Page locks are not used.

MAXDOP = max_degree_of_parallelismMAXDOP =max_degree_of_parallelism
Переопределяет параметр конфигурации сервера Максимальная степень параллелизма на время выполнения операции с индексами.Overrides the Configure the max degree of parallelism Server Configuration Option configuration option for the duration of the index operation. MAXDOP можно использовать для ограничения числа процессоров, используемых при параллельном выполнении планов.Use MAXDOP to limit the number of processors used in a parallel plan execution. Максимальное число процессоров — 64.The maximum is 64 processors.

Важно!

Несмотря на синтаксическую поддержку параметра MAXDOP для всех XML-индексов, инструкция CREATE XML INDEX использует только один процессор для первичного XML-индекса.Although the MAXDOP option is syntactically supported for all XML indexes, for a primary XML index, CREATE XML INDEX uses only a single processor.

Параметр max_degree_of_parallelism может иметь одно из следующих значений:max_degree_of_parallelism can be:

11
Подавляет формирование параллельных планов.Suppresses parallel plan generation.

>1>1
Ограничивает максимальное количество процессоров, используемых в параллельных операциях с индексами, заданным или меньшим числом в зависимости от текущей рабочей нагрузки системы.Restricts the maximum number of processors used in a parallel index operation to the specified number or fewer based on the current system workload.

0 (по умолчанию)0 (default)
В зависимости от текущей рабочей нагрузки системы использует реальное или меньшее число процессоров.Uses the actual number of processors or fewer based on the current system workload.

Дополнительные сведения см. в статье Настройка параллельных операций с индексами.For more information, see Configure Parallel Index Operations.

Примечание

Параллельные операции с индексами доступны не во всех выпусках MicrosoftMicrosoftSQL ServerSQL Server.Parallel index operations are not available in every edition of MicrosoftMicrosoftSQL ServerSQL Server. Сведения о функциях, поддерживаемых различными выпусками SQL ServerSQL Server, см. в статье Возможности, поддерживаемые различными выпусками SQL Server 2016.For a list of features that are supported by the editions of SQL ServerSQL Server, see Editions and Supported Features for SQL Server 2016.

RemarksRemarks

Вычисляемые столбцы, производные от типов данных XML, могут быть проиндексированы или как ключевые, или как неключевые столбцы, если тип данных для вычисляемого столбца может быть использован в качестве ключевого столбца или неключевого столбца индекса.Computed columns derived from xml data types can be indexed either as a key or included nonkey column as long as the computed column data type is allowable as an index key column or nonkey column. Невозможно создать первичный XML-индекс для вычисляемого столбца XML.You cannot create a primary XML index on a computed xml column.

Для просмотра сведений об XML-индексах можно воспользоваться представлением каталога sys.xml_indexes.To view information about XML indexes, use the sys.xml_indexes catalog view.

Дополнительные сведения об XML-индексах см. в разделе XML-индексы (SQL Server).For more information about XML indexes, see XML Indexes (SQL Server).

Дополнительные сведения о создании индексовAdditional Remarks on Index Creation

Дополнительные сведения о создании индексов см. в подразделе "Примечания" раздела CREATE INDEX (Transact-SQL).For more information about index creation, see the "Remarks" section in CREATE INDEX (Transact-SQL).

ПримерыExamples

A.A. Создание первичного XML-индексаCreating a primary XML index

В следующем примере создается первичный XML-индекс по столбцу CatalogDescription таблицы Production.ProductModel.The following example creates a primary XML index on the CatalogDescription column in the Production.ProductModel table.

USE AdventureWorks2012;  
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  

Б.B. Создание вторичного XML-индексаCreating a secondary XML index

В следующем примере создается вторичный XML-индекс по столбцу CatalogDescription таблицы Production.ProductModel.The following example creates a secondary XML index on the CatalogDescription column in the Production.ProductModel table.

USE AdventureWorks2012;  
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  

См. также:See Also

ALTER INDEX (Transact-SQL) ALTER INDEX (Transact-SQL)
CREATE INDEX (Transact-SQL) CREATE INDEX (Transact-SQL)
CREATE PARTITION FUNCTION (Transact-SQL) CREATE PARTITION FUNCTION (Transact-SQL)
CREATE PARTITION SCHEME (Transact-SQL) CREATE PARTITION SCHEME (Transact-SQL)
CREATE SPATIAL INDEX (Transact-SQL) CREATE SPATIAL INDEX (Transact-SQL)
CREATE STATISTICS (Transact-SQL) CREATE STATISTICS (Transact-SQL)
CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
Типы данных (Transact-SQL) Data Types (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL) DBCC SHOW_STATISTICS (Transact-SQL)
DROP INDEX (Transact-SQL) DROP INDEX (Transact-SQL)
XML-индексы (SQL Server) XML Indexes (SQL Server)
sys.indexes (Transact-SQL) sys.indexes (Transact-SQL)
sys.index_columns (Transact-SQL) sys.index_columns (Transact-SQL)
sys.xml_indexes (Transact-SQL) sys.xml_indexes (Transact-SQL)
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
XML-индексы (SQL Server)XML Indexes (SQL Server)