在 SQL Server 中的架构绑定视图上创建索引
Posted
技术标签:
【中文标题】在 SQL Server 中的架构绑定视图上创建索引【英文标题】:Creating index on schema binding view in SQL Server 【发布时间】:2018-09-02 11:18:16 【问题描述】:我正在尝试为模式绑定视图创建索引。此视图包含联合所有运算符和一些连接。如何为此视图创建索引?因为我在我的过程中使用左连接的视图类型。所以我必须提高性能。
例如
create table a
(
prodid int,
prodname varchar(100)
)
insert into a values(1,'ramesh')
create table b
(
prodid int,
prodname varchar(100)
)
insert into b values(2,'kumar')
create view v1
with schemabinding
as
select tb1.prodid, tb1.prodname
from dbo.a tb1
union all
select tb2.prodid, tb2.prodname
from dbo.b tb2
视图已成功创建,但我无法为上述视图创建索引 - 我收到错误消息
它包含一个或多个联合、相交运算符
那么还有其他方法可以为这个视图创建索引吗?
CREATE UNIQUE CLUSTERED INDEX CX_V1
ON dbo.v1(prodid, prodname);
【问题讨论】:
【参考方案1】:问题不在于SCHEMABINDING
,而是因为在索引视图中不允许使用UNION ALL
。我希望错误消息对此很清楚。见the documentation for index view requirements。
另外,为什么要索引这个视图?假设基础表在 prodid
和 prodname
上具有唯一的非聚集索引,我不认为索引视图会显着提高性能。
【讨论】:
好的。我正在使用五个左连接和五个视图。它包含更多记录。所以我尝试在视图上创建索引以提高性能。我应该创建五个临时表并存储视图的结果并在我的存储过程中的临时表上创建索引?.它提高了性能吗? @Ram,这与您提出的问题完全不同。我将从使用 5 个左连接的查询的查询和索引调整开始。如果性能不可接受,使用临时表可能是也可能不是最好的方法。如果您需要这方面的帮助,请连同查询一起提出其他问题,包括 CREATE 表和 DDL。 谢谢。我会问另一个问题。【参考方案2】:您不能在使用联合运算符的视图上创建索引,我认为没有任何办法。
【讨论】:
谢谢。我会尝试使用临时表和临时表上的索引。以上是关于在 SQL Server 中的架构绑定视图上创建索引的主要内容,如果未能解决你的问题,请参考以下文章