在 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)');

 

 

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

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

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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值