CREATE XML INDEX (Transact-SQL)

Создает XML-индекс по заданной таблице. Индекс может быть создан до появления данных в таблице. XML-индексы можно создавать на основе таблиц другой базы данных — для этого нужно указать полное имя базы данных.

Примечание

О создании реляционного индекса см. в разделе CREATE INDEX (Transact-SQL).Дополнительные сведения о создании пространственного индекса см. в разделе CREATE SPATIAL INDEX (Transact-SQL).

Применимо для следующих объектов: SQL Server (начиная с SQL Server 2008 до текущей версии).

Значок ссылки на раздел Cинтаксические обозначения в 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.

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

  • 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 для хранения промежуточных результатов сортировки. Дополнительные сведения см. в разделе Параметр SORT_IN_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-индекс, получает блокировку изменения схемы для таблицы. Это предотвращает доступ к базовой таблице всех пользователей во время операции.

    Примечание

    Операции с индексами в сети доступны не во всех выпусках Microsoft SQL Server.Список функций, поддерживаемых в разных выпусках SQL Server, см. в разделе Функции, поддерживаемые различными выпусками SQL Server 2014.

  • 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
    Переопределяет параметр конфигурации Настройка параметра конфигурации сервера max degree of parallelism только на время выполнения операции с индексами. MAXDOP можно использовать для ограничения числа процессоров, используемых при параллельном выполнении планов. Максимальное число процессоров — 64.

    Важное примечаниеВажно!

    Несмотря на синтаксическую поддержку параметра MAXDOP для всех XML-индексов, инструкция CREATE XML INDEX использует только один процессор для первичного XML-индекса.

    Аргумент max_degree_of_parallelism может иметь следующие значения.

    • 1
      Подавляет формирование параллельных планов.

    • >1
      Ограничивает максимальное количество процессоров, используемых в параллельных операциях с индексами, заданным или меньшим числом в зависимости от текущей рабочей нагрузки системы.

    • 0 (по умолчанию)
      В зависимости от текущей рабочей нагрузки системы использует реальное или меньшее число процессоров.

    Дополнительные сведения см. в разделе Настройка параллельных операций с индексами.

    Примечание

    Параллельные операции с индексами доступны не во всех выпусках Microsoft SQL Server.Список функций, поддерживаемых в разных выпусках SQL Server, см. в разделе Функции, поддерживаемые различными выпусками SQL Server 2014.

Замечания

Вычисляемые столбцы, производные от типов данных xml, могут быть проиндексированы или как ключевые, или как неключевые столбцы, если тип данных вычисляемого столбца может быть использован в качестве ключевого столбца индекса или неключевого столбца. Невозможно создать первичный XML-индекс для вычисляемого столбца типа xml.

Для просмотра сведений об XML-индексах можно воспользоваться представлением каталога sys.xml_indexes.

Дополнительные сведения об XML-индексах см. в разделе XML-индексы (SQL Server).

Дополнительные сведения о создании индексов

Дополнительные сведения о создании индексов см. в разделе «Примечания» в CREATE INDEX (Transact-SQL).

Примеры

А.Создание первичного XML-индекса

В следующем примере создается первичный XML-индекс по столбцу CatalogDescription таблицы Production.ProductModel.

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

Б.Создание вторичного XML-индекса

В следующем примере создается вторичный XML-индекс по столбцу CatalogDescription таблицы Production.ProductModel.

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

См. также

Справочник

ALTER INDEX (Transact-SQL)

CREATE INDEX (Transact-SQL)

CREATE PARTITION FUNCTION (Transact-SQL)

CREATE PARTITION SCHEME (Transact-SQL)

CREATE SPATIAL INDEX (Transact-SQL)

CREATE STATISTICS (Transact-SQL)

CREATE TABLE (SQL Server)

Типы данных (Transact-SQL)

Инструкция DBCC SHOW_STATISTICS (Transact-SQL)

DROP INDEX (Transact-SQL)

sys.indexes (Transact-SQL)

sys.index_columns (Transact-SQL)

sys.xml_indexes (Transact-SQL)

EVENTDATA (Transact-SQL)

Основные понятия

XML-индексы (SQL Server)

XML-индексы (SQL Server)