索引视图和自联接

时间:2016-07-26 18:27:25

标签: sql sql-server

我有这个观点:

CREATE VIEW [dbo].[AccountQuickFindBen]
WITH SCHEMABINDING
AS
select 
AB.AccountId,
AB.AccountNumber,
AB.Name,
AB.CreatedOn,
AB.CreatedBy,
AB.OwningUser,
AB.Telephone1,
AB.Telephone2,
AB.EMailAddress1,
AEB.New_contact_title,
AEB.New_contact_first_name,
AEB.New_contact_last_name,
AEB.New_regnumbers,
XXowninguser.FullName as OwnerIdName,
XXcreatedby.FullName as CreatedByName,
8 as OwnerIdType
from dbo.AccountBase AB
inner join dbo.AccountExtensionBase AEB ON AB.AccountId = AEB.AccountId
inner join dbo.SystemUserBase XXowninguser on XXowninguser.SystemUserId  = AB.OwningUser
inner join dbo.SystemUserBase XXcreatedby on XXcreatedby.SystemUserId = AB.CreatedBy

当我尝试在其上创建索引(在AccountId上)时出现问题,这是不可能的,因为它说视图包含自连接。我假设这是因为我两次加入同一张桌子。

这周围有吗?

由于

1 个答案:

答案 0 :(得分:0)

不,没有好的方法可以解决这个问题。

您可以做的一件事是创建一个索引视图,其中只有一个连接到 dbo.SystemUserBase,然后创建另一个执行另一个连接的非索引视图,即再次从第一个视图到 dbo.SystemUserBase。您获得了大部分但不是全部的性能提升,并且您可以将 WITH NOEXPAND 放在第二个视图的 SQL 中,从而避免必须将其包含在从视图中选择的所有查询中。