在 xml.value 中, XPath中使用 text() 函数的重要性

    被多次问到,为什么在DBA的规范中,会要求在解析xml值时,value 方法的 XPath 中要加 text() 函数,看起来似乎加与不加得到的结果都是一样的。

    下面的测试脚本说明使用 text() 的区别,以及为什么要求使用它。

DECLARE
    @xml xml

SET @xml = N’
<a/>
<b>b
    
<c>c</c>
</b>’
;
SELECT
  @xml.value(‘(/a)[1]’, ‘varchar(10)’);
SELECT @xml.value(‘(/a/text())[1]’, ‘varchar(10)’
);

SELECT
 @xml.value(‘(/b)[1]’, ‘varchar(10)’);
SELECT @xml.value(‘(/b/text())[1]’, ‘varchar(10)’
);

 

 

执行这个脚本,从结果中,可以看出明显的区别

1353404218_1103

通过对比执行计划,可以看出两者的执行有明显的差别,效率也有明显的差异。不使用 text() 的情况下,需要额外的执行步骤用于检索子结点的数据(就算子结点,开销仍然存在)。

所以,如果不是有特殊目的,应该在 XPath 中指定 text() 函数实现精确定位,以此来降低性能开销。

1353404248_3907

1353404257_2564

来源:http://blog.csdn.net/zjcxc/article/details/8204740

About 智足者富

http://chenpeng.info

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>