table 值函数查询优化

table Valued Function Query Optimize

提问人:Sridhar 提问时间:7/24/2013 最后编辑:SergSridhar 更新时间:7/24/2013 访问量:471

问:

处理表值函数查询。这占用了大约整个查询执行时间的 70%。 需要一些帮助来微调它。

INSERT INTO #XMLTAB
SELECT ID,CAST(tab.tabxml as xml).value('(/Root/Element)[1]', 'varchar(100)')
FROM tab 
WHERE TabScore= 36

裁判:

  • #XMLTAB是 Temp 表。
  • Tab是数据库中的表名。
  • tabxml列保存 xml 文件
  • tabscore是另一列。

提前致谢。

sql-server xml t-sql 查询优化

评论

1赞 Ravi Singh 7/24/2013
你能发布查询执行计划吗?

答:

1赞 OzrenTkalcecKrznaric 7/24/2013 #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,请考虑运行第二个语句,这将进一步加快此类操作。这称为辅助 XML 索引,可以有三种不同的类型

请注意,在已存在 XML 的大型表上创建此类 XML 索引可能需要一些时间。

评论

0赞 Sridhar 7/24/2013
tabxml 是 ntext,用于保存 XML 数据
0赞 OzrenTkalcecKrznaric 7/24/2013
好吧,在这种情况下,你无能为力。第一个解决方案是修复您的模式并将 ntext 更改为 xml,如果可以的话,您应该这样做。另一种可能性是将计算出的持久化字段添加到该表中,例如 ,索引该字段,并查询该字段而不是 ntext。实际上没有其他选择可以加快这一速度。tabxmlxml = CAST(tab.tabxml as xml) PERSISTED