XML в SQL Server

Dec 08, 2009 12:39


Довелось поработать с XML в SQL Server 2005, впечатления отличные.


Во-первых, это быстро. Во-вторых, это гибко. Использовать стоит только для сильно динамичных данных, когда нужно обрабатывать, например, нестабильный набор свойств. Очень много подробной информации есть на MSDN.

Теперь про технические подробности. Если XML-поле не будет часто использоваться, то можно просто добавить в таблицу столбец типа XML. Хотя при этом не все возможности XQuery в запросах будут применимы: часто требуется указание точного типа данных, что делается именно схемой. А если поле будет выбираться почти постоянно, надо не только его индексировать (create primary xml index on), но и создать на сервере схему, к которой привязать столбец.

Разница в скорости работы запросов получается, грубо говоря, трехкратная. Без схемы и индекса один мой тест показывал 30 мс, со схемой и индексом - 8 мс. Без схемы, но с индексом было порядка 16 мс. При значительном росте данных, в 30 раз, скорость обработки уменьшилась только в 10 раз, но я проводил тесты при порядке чисел в десятки тысяч, но не миллионов. Была возможность сравнить скорость с аналогичной логикой работы для обычных столбцов, и разница была в районе 30% - это цена динамики и возможности использовать XQuery в запросах.

Для создания схемы используется простая операция добавления схемы с глобальным именем в рамках базы (схемы попадают в Programmability \ Types \ XML Schema Collections):

create xml schema collection some_Usable_Schema as
'xml version="1.0" encoding="utf-8"?>
http://www.w3.org/2001/XMLSchema">
 
  
   
    
     
      
      
     xs:complexType>
    xs:element>
   xs:sequence>
  xs:complexType>
 xs:element>
xs:schema>';

* This source code was highlighted with Source Code Highlighter.

Далее при создании столбца после указания типа (XML) в скобках добавляем ссылку на схему:

ColumnName xml (Content имя_схемы)

Подытоживая, могу сказать: использовать очень просто, возможности XML в БД дает огромные, но применение должно быть оправдано, т.к. усложняется разработка и возможно ухудшение производительности (а это обычно надо компенсировать).

Notas del Terrible

sql, study, .net, development

Previous post Next post
Up