表值函数查询优化

时间:2013-07-24 07:49:13

标签: sql sql-server xml tsql query-optimization

处理表值的函数查询。这占了整个查询执行时间的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是另一栏。

提前致谢。

1 个答案:

答案 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索引可能需要一些时间。