提问人:Sridhar 提问时间:7/24/2013 最后编辑:SergSridhar 更新时间:7/24/2013 访问量:471
table 值函数查询优化
table Valued Function Query Optimize
问:
处理表值函数查询。这占用了大约整个查询执行时间的 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
是另一列。
提前致谢。
答:
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
上一个:查询微调
评论