如何解决在生成的XML SYS表上创建非聚集索引
我目前正在编写一个巨型SQL查询,该查询将从包含巨型XML字符串的行字段中加载XML数据。
为简单起见,让我们使用以下示例查询:
SELECT
[ColumnContainingXMLString].value('(/XPATH/STRING/HERE/TO/XMLNODE/node())[1]','nvarchar(max)') AS ColumnName
FROM
[dbo].[TableContainingXMLColumn]
此查询的问题在于它非常慢,因为我需要从XML抓取许多字段。当我在SSMS中运行“执行计划”时,使用给定的NONCLUSTERED INDEX可以解决较大的查询性能成本:
query execution plan screenshot with recommended index
在上面的屏幕截图中,SSMS建议我创建以下索引:
CREATE NONCLUSTERED INDEX xmlNodeIndex
ON [sys].[xml_index_nodes_1170103209_256000] ([hid],[pk1]);
与此相关的问题是[sys].[xml_index_nodes_1170103209_256000]
是动态生成的系统表,在运行查询之前我无法向其添加索引,因为在运行查询之前该表不存在。
因此,我有两种解决方法:
- 添加某种“配置”,表示在以后创建表时添加以下索引。
- 创建一个单独的表作为
[xml_index_nodes]
表,将上面的索引添加到该表中,然后告诉该查询使用该表而不是生成的表。
真的需要一些帮助,谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。