Выборочный XML-индекс (SXI)
Селективные XML-индексы — это еще один тип XML-индексов, доступный наряду с обычными XML-индексами. Селективный XML-индекс используется в следующих целях.
Для повышения производительности запросов к XML-данным, хранящимся в SQL Server.
Для поддержки более быстрого индексирования больших объемов XML-данных.
Для повышения масштабируемости путем уменьшения затрат на хранение XML-индексов.
Основным ограничением обычных XML-индексов является то, что они индексируют весь XML-документ. Это ограничение влечет за собой несколько значительных недостатков, например снижение производительности запросов и увеличенные затрат на обслуживание, в основном относящихся к затратам на хранение индекса.
Функция селективного XML-индекса позволяет повышать только некоторые пути из XML-документов в индекс. Во время создания индекса производится вычисление этих путей, а узлы, на которые они указывают, разделяются и сохраняются в реляционной таблице в SQL Server. Эта функция использует эффективный алгоритм сопоставления, разработанный Microsoft Research в сотрудничестве с группой разработчиков SQL Server. Этот алгоритм сопоставляет узлы XML с одной реляционной таблицей и достигает исключительной производительности при использовании небольшого пространства для хранения.
Функция селективного XML-индекса также поддерживает вторичные селективные XML-индексы для узлов, которые были индексированы селективным XML-индексом. Эти вторичные селективные индексы являются эффективными и еще более повышают производительность запросов.
Примечание |
---|
Для создания селективных XML-индексов следует включить базу данных с использованием sp_db_selective_xml_index. Дополнительные сведения о том, как включить базу данных, см. в разделе sp_db_selective_xml_index. |
В этом разделе
Преимущества селективных XML-индексов
Селективные XML-индексы и первичные XML-индексы
Простой пример селективного XML-индекса
Поддерживаемые функции, предварительные требования и ограничения
Поддерживаемые функции XML
Неподдерживаемые функции XML
Предварительные требования
Ограничения
Связанные задачи
Преимущества селективных XML-индексов
Селективные XML-индексы дают следующие преимущества:
Значительное улучшение производительности запросов к типу данных XML для типичных нагрузок по запросам.
Сниженные требования к хранилищу по сравнению с обычными XML-индексами.
Сниженные расходы на обслуживание индекса по сравнению с обычными XML-индексами.
Нет необходимости обновлять приложения для получения пользы от селективных XML-индексов.
[В начало]
Селективные XML-индексы и первичные XML-индексы
Важно! |
---|
Создание селективного XML-индекса вместо обычного XML-индекса в большинстве случаев приводит к повышению производительности и более эффективному использованию хранилища. |
Однако селективный XML-индекс не рекомендуется использовать при наличии следующих условий.
Необходимо сопоставить большое число путей узлов.
Поддерживаются запросы неизвестных элементов или элементов в неизвестном месте структуры документа.
[В начало]
Простой пример селективного XML-индекса
Рассмотрим следующий фрагмент XML как XML-документ в таблице из приблизительно 500 000 строк.
<book>
<created>2004-03-01</created>
<authors>Various</authors>
<subjects>
<subject>English wit and humor -- Periodicals</subject>
<subject>AP</subject>
</subjects>
<title>Punch, or the London Charivari, Volume 156, April 2, 1919</title>
<id>etext11617</id>
</book>
Создание первичного XML-индекса для такого большого количества строк этой простой схемы занимает длительное время. Создание запросов к этим данным также является неэффективным, поскольку первичный XML-индекс не поддерживает селективное индексирование.
Если запросы к данным выполняются только по путям /book/title и /book/subjects, вы можете создать следующий селективный XML-индекс.
CREATE SELECTIVE XML INDEX SXI_index
ON Tbl(xmlcol)
FOR
(
pathTitle = '/book/title/text()' AS XQUERY 'xs:string',
pathAuthors = '/book/authors' AS XQUERY 'node()',
pathId = '/book/id' AS SQL NVARCHAR(100)
)
Предыдущая инструкция — это хороший пример синтаксиса CREATE, используемого при создании селективного XML-индекса. В инструкции CREATE указывается имя индекса и определяется таблица и XML-столбец для индексирования. Затем передаются пути для индексирования. Путь состоит из 3 частей:
имя, однозначно определяющее путь;
выражение XQuery, описывающее путь;
необязательные указания по оптимизации.
Дополнительные сведения об этих элементах см. в разделе Связанные задачи.
[В начало]
Поддерживаемые функции, предварительные требования и ограничения
Поддерживаемые функции XML
Селективные XML-индексы поддерживают XQuery, поддерживаемые SQL Server в методах exist(), value() и nodes().
Для методов exist(), value() и nodes() селективные XML-индексы содержат достаточно данных для преобразования всего выражения.
Для методов query() и modify() селективные XML-индексы можно использовать только для фильтрации узлов.
Для метода query() селективные XML-индексы не используются для получения результатов.
Для метода modify() селективные XML-индексы не используются для обновления XML-документов.
[В начало]
Неподдерживаемые функции XML
Селективные XML-индексы не поддерживают следующие функции, поддерживаемые в реализации SQL Server XML:
Индексирование узлов со сложными типами XS: типами объединений, типами последовательностей и типами списков.
Индексирование узлов с двоичными типами XS, например base64Binary и hexBinary.
Указание узлов для индексирования с выражениями Xpath, которые содержат символ-шаблон * в конце. Например, /a/b/c/*, /a//b/* или /a/b/*:c.
Индексирование любых осей, отличных от осей дочерних элементов, атрибутов или объектов-потомков. Вариант //<step> допускается как исключение.
Индексирование инструкций и комментариев по обработке XML.
Указание и получение идентификатора для узла с помощью функции id().
[В начало]
Предварительные требования
Следующие предварительные условия должны существовать до создания селективного XML-индекса для XML-столбца в пользовательской таблице.
Кластеризованный индекс должен существовать для первичного ключа таблицы пользователя.
Первичный ключ пользовательской таблицы ограничивается размером в 128 байт при использовании с селективными XML-индексами.
Ключ кластеризации пользовательской таблицы имеет ограничение в 15 столбцов при использовании с селективными XML-индексами.
[В начало]
Ограничения
Общие требования и ограничения
- Каждый селективный XML-индекс может быть создан только для одного XML-столбца. Нельзя создать селективный XML-индекс для неселективного столбца XML. Каждый XML-столбец в таблице может иметь только один селективный XML-индекс. Каждая таблица может иметь до 249 селективных XML-индексов.
Ограничения для поддерживаемых объектов
Нельзя создавать селективные XML-индексы для следующих объектов:
XML-столбцы в представлении.
Возвращающая табличное значение переменная с XML-столбцами.
Переменные типа XML.
Вычисляемые XML-столбцы.
XML-столбец с глубиной более чем в 128 вложенных узлов.
Ограничения, относящиеся к хранению
Существует ограниченное предельное число узлов из XML-документа, которое можно добавить в индекс. Селективный XML-индекс сопоставляет XML-документы с одной реляционной таблицей. Поэтому он не может содержать более 1024 столбцов со значениями, отличными от NULL, в любой заданной строке таблицы. Кроме того, многие из ограничений для разреженных столбцов также применяются к селективным XML-индексам, поскольку индексы используют разреженные столбцы для хранения.
Максимальное количество столбцов со значениями, отличными от NULL, поддерживаемое в любой заданной строке, зависит от размера данных в столбцах.
В лучшем случае поддерживается 1024 столбцов со значениями, отличными от NULL, если все столбцы имеют тип bit.
В худшем случае поддерживается только 236 столбцов со значениями, отличными от NULL, если все столбцы являются большими объектами типа varchar.
Внутри селективных XML-индексов используется несколько столбцов для каждого индексированного пути узла. Общее количество узлов, которые могут быть проиндексированы, может составлять до 50 экземпляров.
Селективные XML-индексы перестраиваются при создании и изменении индекса при помощи инструкций CREATE и ALTER.
При создании или изменении селективного XML-индекса при помощи инструкций CREATE и ALTER оно перестраивается в однопотоковом режиме «вне сети». Часто инструкции ALTER отрицательно влияют на производительность запросов к индексированным XML-документам.
Прочие ограничения
Селективные XML-индексы не поддерживаются в указаниях запросов.
Селективные XML-индексы и вторичные селективные XML-индексы не поддерживаются в помощнике по настройке базы данных.
[В начало]
Связанные задачи
Задача |
Раздел |
При создании или изменении селективного XML-индекса необходимо указать пути узлов, которые нужно индексировать, а также необязательные указания по оптимизации. |
Задайте путь и указания по оптимизации для селективных XML-индексов |
Создание, изменение и удаление селективного XML-индекса. |
|
Создание, изменение и удаление вторичного селективного XML-индекса. |
Создание, изменение и удаление вторичных селективных XML-индексов |
[В начало]