web-dev-qa-db-ja.com

NVARCHAR(MAX)と比較した場合のSQL ServerのXMLデータ型のパフォーマンスの低下は何ですか?

ログエントリを保持するデータベースがあります。

ログテーブルの列の1つには、シリアル化された(XMLへの)オブジェクトが含まれており、私のチームの1人が、NVARCHAR(MAX)ではなくXMLデータ型を使用することを提案しました。このテーブルには、ログが「永久に」保持されます(いくつかの非常に古いエントリのアーカイブは将来検討される可能性があります)。

CPUのオーバーヘッドについて少し心配していますが、DBがより速く成長する可能性があることについてさらに心配しています(参照された質問のFoxyBOAは、XMLを使用するとDBが70%大きくなりました)。

私はこれを読みました 質問 そしてそれは私にいくつかのアイデアを与えました、しかし私はデータベースサイズが増加するか減少するかについての明確化に特に興味があります。

その件に関するあなたの洞察/経験を共有していただけませんか。

ところで。現在、SQL Server内のXML機能に依存する必要はありません(特定のケースでは、私にとっての利点はほとんどありません)。ログエントリが抽出されることもありますが、私は.NETを使用してXMLを処理することを好みます(小さなクライアントを作成するか、.NETアセンブリで定義された関数を使用します)。

26
Piotr Owsiak

XMLを持っていて、それが常にXMLであると確信できる場合は、その方法を使用することを強くお勧めします。 SQL Serverは、XMLを最適化された形式で格納します。その恩恵を受けるためにXMLインデックスを作成する必要はありません。

5KB XMLの5000行をXML列に挿入すると、約1250ページ= 9MBになります。同じ5KBのXMLで同じ5000行をNVARCHAR(MAX)に挿入すると、3700ページまたは29MB以上が使用されます。これはかなりの違いです。

また、XMLをSQL Serverに格納されているXMLスキーマに関連付けることができれば、その違いはさらに顕著になるはずです。さらに、保存されているXMLがスキーマに準拠していることも保証されます。これは非常に役立つ場合があります。プレーンなNVARCHAR(MAX)列ではそれを行うことはできません。

また、NVARCHAR(MAX)を介してXMLを使用すると、パフォーマンスが低下することに同意しません。まったく逆です。コンテンツを表示またはフェッチしようとしているときにSQLServerから取得するデータが少なくなる可能性があるため、NVARCHAR(MAX)よりも少し速いと思います。

34
marc_s

このベンチマークは、使用するXMLデータ型が少ないIOですが、VARCHAR(MAX)よりも少し多いCPUを使用していることを示しています。NVARCHAR(MAX)はさらに多くのIOユニコードなので。

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

3
Revindex