在 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。

另外,为什么要索引这个视图?假设基础表在 prodidprodname 上具有唯一的非聚集索引,我不认为索引视图会显着提高性能。

【讨论】:

好的。我正在使用五个左连接和五个视图。它包含更多记录。所以我尝试在视图上创建索引以提高性能。我应该创建五个临时表并存储视图的结果并在我的存储过程中的临时表上创建索引?.它提高了性能吗? @Ram,这与您提出的问题完全不同。我将从使用 5 个左连接的查询的查询和索引调整开始。如果性能不可接受,使用临时表可能是也可能不是最好的方法。如果您需要这方面的帮助,请连同查询一起提出其他问题,包括 CREATE 表和 DDL。 谢谢。我会问另一个问题。【参考方案2】:

您不能在使用联合运算符的视图上创建索引,我认为没有任何办法。

【讨论】:

谢谢。我会尝试使用临时表和临时表上的索引。

以上是关于在 SQL Server 中的架构绑定视图上创建索引的主要内容,如果未能解决你的问题,请参考以下文章

如何将架构绑定添加到 SQL Server 2008 中的视图

SQL Server里面啥样的视图才能创建索引

无法架构绑定 sql server 视图

使用 SQL Server 索引来提高性能

在架构内创建多个视图 - SQL Server

sql server 中创建架构,架构是干啥用的,为啥要创建架构,有啥好处?