У меня есть приложение, которое хранит xml документы в столбце на SQL Server. Структура XML-документа подобна тому ниже:
<document>
<item>
...
<phoneNumber>0123456789</phoneNumber>
....
</item>
<item>
...
<phoneNumber>9876543210</phoneNumber>
....
</item>
...
</document>
В основном этот столбец хранит ряд клиентской информации. XML-документы могут иметь различные дочерние элементы в <объект> элемент, тем не менее, некоторые из этих дочерних элементов содержатся во всех документах (например, <phoneNumber> элемент в вышеупомянутом примере).
Таким образом, я могу иметь, например, одна строка в таблице, содержащей следующее значение
<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 информации.
Какие-либо предложения или идеи?
Заранее спасибо, Carlos Loth.
Да.
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