Можно ли установить индекс внутри столбца XML на SQL Server 2005 / SQL Server 2008? - PullRequest
6 голосов
/ 05 февраля 2010

У меня есть приложение, которое хранит документы XML внутри столбца на SQL Server. Структура XML-документа аналогична приведенной ниже:

<document>
    <item>
        ...
        <phoneNumber>0123456789</phoneNumber>
        ....
    </item>
    <item>
        ...
        <phoneNumber>9876543210</phoneNumber>
        ....
    </item>
    ...
</document>

В основном в этом столбце хранится информация о клиентах. XML-документы могут иметь различные дочерние элементы внутри элемента , однако некоторые из этих дочерних элементов содержатся во всех документах (например, элемент в приведенном выше примере).

Таким образом, я могу иметь, например, одну строку в таблице, содержащую следующее значение

<document>
    <item>
        <firstName>Carlos</firstName>
        <lastName>Loth</lastName>
        <phoneNumber>0123456789</phoneNumber>
    </item>
    <item>
        <firstName>Alberto</firstName>
        <lastName>Tomatis</lastName>
        <phoneNumber>987654321</phoneNumber>
    </item>
</document>

И еще одна строка, содержащая этот документ

<document>
    <item>
        <orderNumber>XYZ</orderNumber>
        <phoneNumber>0123456789</phoneNumber>
    </item>
    <item>
        <orderNumber>ABC</orderNumber>
        <phoneNumber>987654321</phoneNumber>
    </item>
</document>

Итак, мой вопрос: возможно ли создать индекс для этого столбца XML на основе элемента document / item / phoneNumber? Мне нужно выполнить запрос, который возвращает информацию, хранящуюся в других «фиксированных известных» столбцах на основе информации phoneNumber.

Есть предложения или идеи?

Заранее спасибо, Карлос Лот.

Ответы [ 2 ]

2 голосов
/ 12 ноября 2014

Невозможно в 2008 году и ранее (т. Е. На момент, когда этот вопрос был первоначально задан), но в 2012 году + были введены селективные XML-индексы, позволяющие вам сделать это - индексировать определенный (набор) путей (путей).

1 голос
/ 05 февраля 2010

Да.
SQL Server 2005 поддерживает четыре различных типа XML-индексов. Поскольку XML-индекс несколько отличается от реляционного индекса, необходимо знать их реализацию, прежде чем мы подойдем к тому, как использовать их для максимальной эффективности. Существует один «первичный индекс XML» и три разных варианта «вторичного индекса XML».

Подробнее см. в этой статье MSDN

.

Вам необходимо создать первичный индекс XML, прежде чем вы сможете определить вторичные индексы XML:

CREATE PRIMARY XML INDEX xml_idx ON your_table(xml_column)
CREATE XML INDEX xml_idx ON your_table(xml_column) FOR PROPERTY

Создание документации XML Index

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...