我想创建一个集成来自多个表的数据的索引视图,但SQL Server会抱怨错误消息:
无法在视图“MyView”上创建索引。该视图包含“dbo.Companies”上的自联接。
视图定义是这样的(简化版):
SELECT T.Field1
, T.Field2
, P.CompanyName AS ProviderName
, C.CompanyName AS CustomerName
, T3.Field1
FROM dbo.Table1 T
INNER JOIN dbo.Companies P ON T.ProviderId = T2.Id
INNER JOIN dbo.Companies C ON T.CustomerId = T2.Id
INNER JOIN dbo.Table3 ON T.Id = T3.Id
这种情况有解决方法吗?我不想将 Companies 表拆分为两个表。
提前致谢。
答案 0 :(得分:2)
您将无法解决此问题,索引视图必须符合Creating Indexed Views中列举的某些限制。除其他外,不支持外部和自我连接(从上到下的第10个限制)。它归结为引擎能够在更新基表时更新视图索引。
不确切知道数据模型的所有细节,您确定索引视图是否必要且基表索引是否足够?
答案 1 :(得分:0)
描述了一种解决方法here。
您创建了两个视图:
在此变通方法中,您确实获得了一个执行连接的索引视图,但 SQL 需要执行额外的 PIVOT 操作以获取您希望如何使用数据的数据。我不知道这是否会提高性能与仅在没有索引视图的情况下进行连接。 (但如果您进行分析,请告诉我)。