使用索引创建视图

Posted

技术标签:

【中文标题】使用索引创建视图【英文标题】:create view with indexes 【发布时间】:2011-03-28 07:36:05 【问题描述】:

我想创建一个视图,该视图将显示与其查询的表相同的属性

CREATE VIEW Agent_View
AS 
SELECT * FROM Agent_table

我想知道是否还需要在 Agent_View 中创建与 Agent_table 相同的索引。

我是否需要将 Agent_View 声明为模式绑定才能创建索引。是否有任何解决方法可以在不声明为 schemabound 的情况下创建索引?

【问题讨论】:

我认为您不需要在视图上创建索引。将使用表的索引。 【参考方案1】:

您不能使用SELECT * 在视图上创建索引,因为您不能拥有WITH SCHEMABINDING

没有索引的视图只是一个扩展为外部查询的宏。所以无论如何都会使用表索引。从架构的角度来看,视图不存在。

最后,恕我直言,这可能是对视图的最无意义的使用。它添加了零值

【讨论】:

【参考方案2】:

针对此视图的大多数(如果不是全部)查询的行为就像您直接使用了底层表一样。

因此,如果您在agent_table 中为agent_name 编制索引,并执行如下查询:

select *
  from agent_view
 where agent_name = 'James Bond';

...它将被优化器重写为:

select *
  from agent_table
 where agent_name = 'James Bond';

是否使用索引是另一个问题。

【讨论】:

【参考方案3】:

如果您有任何复杂的查询,您可能希望创建索引视图,但在您的情况下将使用表的索引。

MSDN reference

【讨论】:

以上是关于使用索引创建视图的主要内容,如果未能解决你的问题,请参考以下文章

创建视图索引

在 SQL Server 中的架构绑定视图上创建索引

如何创建儿童计数的索引视图

SQL Server - 使用当前 GetDate 筛选器创建架构绑定索引视图

SQL 在 Select 中使用 SUM() 在视图上创建索引

一文教你学会Hive视图和索引