处理表值的函数查询。这占了整个查询执行时间的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
是另一栏。提前致谢。
答案 0 :(得分:1)
我看到您正在使用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,可以是three different types。
请注意,在已存在XML的大型表上创建此类XML索引可能需要一些时间。