处理表值函数查询。这占用了整个查询执行时间的 70%。需要一些帮助来微调它。
INSERT INTO #XMLTAB
SELECT ID,CAST(tab.tabxml as xml).value('(/Root/Element)[1]', 'varchar(100)')
FROM tab
WHERE TabScore= 36
参考:
#XMLTAB
是临时表。Tab
是数据库中的表名。tabxml
列包含 xml 文件tabscore
是另一列。
提前致谢。
处理表值函数查询。这占用了整个查询执行时间的 70%。需要一些帮助来微调它。
INSERT INTO #XMLTAB
SELECT ID,CAST(tab.tabxml as xml).value('(/Root/Element)[1]', 'varchar(100)')
FROM tab
WHERE TabScore= 36
参考:
#XMLTAB
是临时表。Tab
是数据库中的表名。tabxml
列包含 xml 文件tabscore
是另一列。提前致谢。
我看到您使用的是 SQL Server XML 数据类型。你知道你可以索引它吗?
试试这个:
CREATE PRIMARY XML INDEX PXML_tab_tabxml
ON tab (tabxml)
CREATE XML INDEX IXML_tab_tabxml
ON tab (tabxml)
USING XML INDEX PXML_tab_tabxml FOR PATH;
第一条语句会将您的 xml 分解为内部结构(索引行)并使 SQL Server 更有效地查询此类反汇编的 XML。这称为 PRIMARY XML INDEX。
但是,如果您使用 value() 方法从某个表中查询 XML,请考虑运行第二条语句,这将进一步加快此类操作。这称为 SECONDARY XML INDEX,可以是三种不同的类型。
请注意,在已存在 XML 的大型表上创建此类 XML 索引可能需要一些时间。