Sql server 我应该使用value()还是exists()来过滤xml中的记录以提高速度

Sql server 我应该使用value()还是exists()来过滤xml中的记录以提高速度,sql-server,Sql Server,问题1:可以使用value()或exist()方法过滤行。我想知道哪一个更快 问题#2:在SQL中,我们在中使用操作符,如下所示: select * from abc where abcid in (1,2) 同样,在处理XML时,我们可以在操作符中使用 问题#1: 问题2: 您诚挚的(1)差异可能来自您的索引 路径索引将提高WHERE子句上exist()谓词的性能,而属性索引将提高value()函数的性能 阅读: (2) XPath 1.0的=运算符就是这样工作的,尽管XPath 1.0

问题1:可以使用
value()
exist()
方法过滤行。我想知道哪一个更快

问题#2:在SQL中,我们在中使用
操作符,如下所示:

select * 
from abc 
where abcid in (1,2)
同样,在处理XML时,我们可以在
操作符中使用

问题#1:

问题2:

您诚挚的

(1)差异可能来自您的索引

路径索引将提高WHERE子句上exist()谓词的性能,而属性索引将提高value()函数的性能

阅读:

(2) XPath 1.0的=运算符就是这样工作的,尽管XPath 1.0没有提供用于编写序列的语法。因此,如果您有一个XML文档

<doc>
  <value>1</value>
  <value>2</value>
  <value>3</value>
</doc>

1.
2.
3.
然后像
//doc[value=2]
这样的表达式将返回该doc元素


在XPath2.0中,语法(1,2,3)将创建一个由三个整数组成的序列,您可以编写类似于
$i=(1,2,3)
的条件。但是,文本序列不是XPath 1.0的一个功能——在XPath表达式的一侧获取多个值的唯一方法是使用匹配多个节点的路径表达式。

如果您有两匹马,并且您想知道这两匹马中哪匹比您的马跑得快,请参阅Eric Lippert提供的更多背景信息,我想使用node(/doc/value)分解xml,这样我将得到三行,然后,我想得到2和3,但不是1,如何使用xml得到它。
WITH XMLNAMESPACES (  
     'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS PD,  
     'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS WM)  
SELECT  
    CatalogDescription.value('(/PD:ProductDescription/@ProductModelName)[1]', 'nvarchar(100)')
FROM  
    Production.ProductModel  
WHERE
    CatalogDescription.value('(/PD:ProductDescription/@ProductModelName)[1]', 'nvarchar(100)') = 'Mountain 100'
<doc>
  <value>1</value>
  <value>2</value>
  <value>3</value>
</doc>