Какое снижение производительности типа данных XML в SQL Server по сравнению с NVARCHAR (MAX)? - PullRequest
25 голосов
/ 21 мая 2010

У меня есть база данных, в которой будут храниться записи журнала.

Один из столбцов в таблице журнала содержит сериализованные (в XML) объекты, и один из членов моей команды предложил использовать тип данных XML, а не NVARCHAR (MAX). В этой таблице будут храниться журналы «навсегда» (в будущем можно рассмотреть возможность архивирования некоторых очень старых записей).

Меня немного беспокоит загрузка ЦП, но я еще больше беспокоюсь о том, что БД может расти быстрее (FoxyBOA из указанного вопроса получил БД на 70% больше при использовании XML).

Я прочитал этот вопрос , и это дало мне некоторые идеи, но мне особенно интересно уточнить, увеличивается или уменьшается размер базы данных.

Не могли бы вы поделиться своим пониманием / опытом в этом вопросе.

КСТАТИ. В настоящее время у меня нет необходимости зависеть от функций XML в SQL Server (в конкретном случае для меня это практически нулевое преимущество). Иногда извлекаются записи журнала, но я предпочитаю обрабатывать XML с помощью .NET (либо путем написания небольшого клиента, либо с помощью функции, определенной в сборке .NET).

Ответы [ 2 ]

34 голосов
/ 21 мая 2010

Если у вас есть XML, и вы можете быть уверены, что это всегда XML, я определенно рекомендую пойти по этому пути. SQL Server хранит XML в оптимизированном формате - вам даже не нужны какие-либо индексы XML для этого.

Если вы вставите 5000 строк 5 КБ XML в столбец XML, вы получите примерно 1250 страниц = 9 МБ. Вставка тех же 5000 строк с тем же 5 КБ XML в NVARCHAR (MAX) использует более 3700 страниц или 29 МБ - большая разница!

И это различие должно быть еще более заметным, если вы можете связать свой XML со схемой XML, хранящейся в SQL Server. Кроме того, вы также гарантируете, что сохраненный XML-файл соответствует схеме - иногда может быть очень полезным! Не может сделать это с простым столбцом NVARCHAR (MAX) ...

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

3 голосов
/ 14 августа 2010

Этот тест показывает тип данных XML с использованием меньшего количества операций ввода-вывода, но с немного большей загрузкой процессора, чем VARCHAR (MAX). Я бы подумал, что NVARCHAR (MAX) потребует еще больше ввода-вывода, так как это Unicode.

http://searchsqlserver.techtarget.com/tip/XML-data-type-in-SQL-Server-2005-vs-VARCHAR-MAX

...