【发布时间】:2012-01-07 10:40:10
【问题描述】:
我有一个从带有 xml 数据的表中提取一些信息的视图。
每个文档包含一个Product 和几个PurchaseOrderDetail。我想为每个Product 创建一个包含所有PurchaseOrderDetail 的视图。
CREATE VIEW [dbo].[XML_PurchaseOrders]
WITH SCHEMABINDING
AS
SELECT
p.n.value('.', 'int') AS PurchaseOrderID
,x.ProductID
FROM dbo.XmlLoadData x
CROSS APPLY x.PayLoad.nodes('declare namespace NS="http://schemas.datacontract.org/2004/07/XmlDbPerfTest";
/NS:ProductAndRelated/NS:Product/NS:PurchaseOrderDetails/NS:PurchaseOrderDetail/NS:PurchaseOrderID') p(n)
GO
PayLoad 列包含 XML 数据。
这种视图的问题在于它非常缓慢,因为 XML 文档既大又丰富。
我想为这个视图编制索引,但这给了我错误
无法在视图“XmlLoad.dbo.XML_PurchaseOrders”上创建索引,因为它包含 APPLY。考虑不索引视图,或删除 APPLY。
是否可以重写视图以添加索引?
我已经尝试了几次尝试,主要是使用select ... from (select ....) innnerSelect group by foo,但所有这些都落在了关于视图索引的一个或另一个规则上。
【问题讨论】:
-
由于您需要使用 XML 中的多个节点,我看不出没有
CROSS APPLY怎么办你可以在它上面创建一个索引视图:-( -
@marc_s,我也没有,但我希望有其他方法来扩展我不知道的 XML。
-
我认为没有选项可以从 XML 中提取这些数据并存储在关系表中?
-
@billinkc,这就是我目前正在做的事情。但最好有一个索引视图以避免维护其他表并确保关系表不会与主表不同步。
标签: sql sql-server-2008 xpath view indexing