使用索引创建视图
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 - 使用当前 GetDate 筛选器创建架构绑定索引视图