我有一个像这样的学校桌:
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)上具有聚集索引。
答案 0 :(得分:0)
在XML字段上提供主索引并不能使检索更快
比较没有索引和有索引的查询计划,您会发现它们完全相同,因此与您的查询没有区别。
如果要查看实际使用的索引,则必须使用xml Data Type Methods之一。
select XMLData.query('.') from dbo.School;
在右下角,您看到正在使用的XML索引。如果仔细观察,您实际上会看到针对表xml_index_nodes_4...
的聚集索引查找。该表包含XML文档具有的所有预切碎的节点和值,并且查询计划的一部分将检索构成XML的所有点和片段,而UDX运算符负责将它们重新组合到XML文档中。我向您保证,在这种情况下,最好不要使用索引。直接检索XML Blob更快。
有没有办法更快地做到这一点?
不是真的符合您在问题中指定的要求。您应该看看是否可能只检索XML的部分,以及仅检索客户机完成其工作所需的行的可能性。