XMLタイプの主な利点の1つは、それが高度に最適化された形式(VARBINARY(MAX)
@Olegの回答に記載されていない)で格納され、表示される正確な文字列表現を格納せず、代わりに要素と属性の名前と参照のディクショナリがあることです彼らのIDで彼らに。また、空白を削除します。以下を試してください:
DECLARE @Test1 XML = N'<Test><TagName>1</TagName><TagName>2</TagName></Test>';
DECLARE @String1 NVARCHAR(MAX) = CONVERT(NVARCHAR(MAX), @Test1);
SELECT DATALENGTH(@Test1) AS [XmlBytes],
LEN(@String1) AS [StringCharacters],
DATALENGTH(@String1) AS [StringBytes];
SET @Test1 = N'<Test><TagName>1</TagName><TagName>2</TagName><TagName>3</TagName>
<TagName>4</TagName><TagName>5</TagName><TagName>6</TagName></Test>';
SET @String1 = CONVERT(NVARCHAR(MAX), @Test1);
SELECT DATALENGTH(@Test1) AS [XmlBytes],
LEN(@String1) AS [StringCharacters],
DATALENGTH(@String1) AS [StringBytes];
戻り値:
XmlBytes StringCharacters StringBytes
56 53 106
XmlBytes StringCharacters StringBytes
84 133 266
上記の出力例からわかるように、4つの要素(#3、4、5、6)を追加VARCHAR
すると、NVARCHAR
変数に80文字(つまり、を使用する場合は80バイト)と160バイトが追加されます。しかし、それだけでXML変数に28バイトを追加少なく、それがために追加よりも、VARCHAR
(念の誰かがの賛成で議論するつもりだったVARCHAR
オーバーXML
ため、XML
UTF-16 [ほとんど]ダブルバイトです)。この最適化は大量のスペースを節約でき、XML
データ型を使用するのに十分な理由です。