结果:
看起来是一样的,但是……
SELECT datalength(MyXML) FROM TryXMLDatatype Go SELECT datalength(MyXML) FROM TryVACRCHARDatatype Go |
这比前面好一些(现在是136,268,而不是271,210),但情况仍然相同。如果我将XML转化到VARCHAR(MAX)然后计算长度:
SELECT datalength(convert(varchar(max),MyXML)) FROM TryXMLDatatype go SELECT datalength(MyXML)FROM TryVARCHARDatatype Go |
长度相同。
这意味着XML数据类型的存储方式更加高效。现在两个表包括了相同的数据,让我们再看看Profiler的跟踪命令select * from both tables (three executions)的结果:
XML数据类型的读取数少了20%。
I/O统计:
TryXMLDatatype表:扫描次数:0,逻辑读取次数:1,物理读取次数:0,预读次数:0,慢速逻辑读取次数:56,慢速物理读取次数:0,慢速预读次数:0。
TryVARCHARDatatype表:扫描次数:0,逻辑读取次数:1,物理读取次数:0,预读次数:0,慢速逻辑读取次数:100,慢速物理读取次数:0,慢速预读次数:0。
同样,这里XML数据类型的读操作也效率更高。
查询到XML转换为VARCHAR(MAX)是怎样的呢?
SELECT convert(varchar(max),MyXML) FROM TryXMLDatatype Go SELECT MyXML FROM TryVARCHARDatatype Go |
TryXMLDatatype表:扫描次数:1,逻辑读取次数:1,物理读取次数:0,预读次数:0,慢速逻辑读取次数:20,慢速物理读取次数:0,慢速预读次数:9。
TryVARCHARDatatype表:扫描次数:1,逻辑读取次数:1,物理读取次数:0,预读次数:0,慢速逻辑读取次数:100,慢速物理读取次数:0,慢速预读次数:0。
对于不变行为的唯一度量标准是I/O读取。而且,XML转换查询还会使用CPU资源来实现转换——这很正常。
结论
XML数据类型表示存储纯XML数据,它不包括不必要的头尾字符。这带来的结果是通过I/O方法实现更划算的存储方式,然而这里仍然有一些CPU资源用于验证XML是有否效。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16436858/viewspace-604317/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/16436858/viewspace-604317/