在XML字段上证明主索引并不能使检索速度更快

时间:2018-06-28 11:38:30

标签: sql sql-server xml

我有一个像这样的学校桌:

Id Classification XMLData

Where Id is a uniqueidentifier, Classification is a NVARCHAR and XMLData is XML.

此表有超过一百万行。 XML数据各不相同,因为看起来可能像这样:

<student><grade></grade><standing></standing><gpa><gpa></student>

另一个例子:

<professor><subject></subject><years></years></professor>

但是,当我尝试使用此查询从表中检索XML数据时:

SELECT XMLData FROM School

查询大约需要1分钟才能获取所有结果。

我尝试使用以下语法在XML列上放置主索引:

CREATE PRIMARY XML INDEX IXML_Value ON School (XMLData);

但是似乎没有任何时间可以改进。检索仍然徘徊在1分钟左右。这正常吗?有没有办法更快地做到这一点?

作为记录,我的School表在主键(Id)上具有聚集索引。

1 个答案:

答案 0 :(得分:0)

  

在XML字段上提供主索引并不能使检索更快

比较没有索引和有索引的查询计划,您会发现它们完全相同,因此与您的查询没有区别。

enter image description here

如果要查看实际使用的索引,则必须使用xml Data Type Methods之一。

select XMLData.query('.') from dbo.School;

enter image description here

在右下角,您看到正在使用的XML索引。如果仔细观察,您实际上会看到针对表xml_index_nodes_4...的聚集索引查找。该表包含XML文档具有的所有预切碎的节点和值,并且查询计划的一部分将检索构成XML的所有点和片段,而UDX运算符负责将它们重新组合到XML文档中。我向您保证,在这种情况下,最好不要使用索引。直接检索XML Blob更快。

  

有没有办法更快地做到这一点?

不是真的符合您在问题中指定的要求。您应该看看是否可能只检索XML的部分,以及仅检索客户机完成其工作所需的行的可能性。