Я определяю схему для нового набора ресурсов с использованием SQL Server 2008 ... В этом случае каждая запись ( например, строка ) должна будет хранить фрагменты XML. Временами; хотя и не часто; Мне нужно запросить XML, чтобы найти значения элементов и атрибутов. Если бы я оставил свои собственные разработки, я бы использовал тип данных xml, хотя меня убеждали, что это связано с проблемами. Так что это подводит меня к моим вопросам.
Учитывая этот сценарий, какие факторы я должен рассматривать при попытке решить между хранением XML в XML - столбце против в VARCHAR (MAX) колонка
Если это поможет ... вот некоторые дополнительные детали:
- Не было принято никакого решения относительно использования схем для этих фрагментов ( например, XSD )
- Размеры фрагментов будут варьироваться от маленьких до очень больших
- Весь XML будет правильно сформирован
- В течение дня будет собрано до ~ 10 000 фрагментов с поддержкой онлайн-запросов в течение ~ 3 месяцев
- Запросы к XML будут происходить в течение дня, но они должны оставаться легкими с несколькими параллельными запросами этого типа
sql-server-2008
database-design
schema
datatypes
xml
JoeGeeky
источник
источник
<foo></foo>
станут<foo />
Ответы:
Если запросы к XML будут выполняться с помощью возможностей SQL Server SQL, используйте тип XML для хранения XML, чтобы избежать приведения
А также
имейте в виду, что тип XML может храниться немного медленнее из-за проверки XML, но основным типом XML является обычный varbinary (max)
источник
VARBINARY(MAX)
. Это оптимизированный формат, который означает, что даже если вы не собираетесь запрашивать его, вы все равно должны использоватьXML
тип данных.Факторами являются:
XML
Тип запрашиваемый / распознаваемо через выражение XQuery, включая возможность использовать FLWOR заявление и итерациюXML
переменных и столбцах могут быть изменены встроенными с помощью выражений XQuery через XML DML .XML
данные хранятся в формате UTF-16 LE (Little Endian), поэтомуVARCHAR(MAX)
выбор будет неудачным, так как это может привести к потере данных. Следовательно, истинное решение должно быть междуXML
иNVARCHAR(MAX)
, учитывая, чтоNCHAR
/NVARCHAR
также является UTF-16 LE.XML
данные могут быть проверены на соответствие XSD /XML SCHEMA COLLECTION
. Проверка (за пределами обеспечения правильности) не выполняется, если не указан сборник схем XML, но этот параметр недоступен при использованииNVARCHAR(MAX)
.Одним из основных преимуществ типа XML является то, что он хранится в высокооптимизированном формате (не так,
VARBINARY(MAX)
как указано в ответе @ Oleg), который не хранит точное строковое представление, которое вы видите, а вместо этого имеет словарь имен и ссылок на атрибуты и атрибуты. им по их удостоверению личности. Это также удаляет пробелы. Попробуйте следующее:Возвращает:
Как видно из приведенного выше примера, при добавлении четырех элементов (# 3, 4, 5 и 6)
VARCHAR
кNVARCHAR
переменной добавляется 80 символов (следовательно, 80 байт при использовании ) и 160 байт . Тем не менее, он добавил только 28 байтов к переменной XML, что меньше, чем он добавилVARCHAR
(на тот случай, если кто-то собирался спорить в пользуVARCHAR
over,XML
потому чтоXML
это UTF-16, который [в основном] является двухбайтовым). Эта оптимизация может сэкономить массу места и сама по себе является достаточной причиной для использованияXML
типа данных.источник