使用索引创建视图

时间:2011-03-28 07:36:06

标签: sql-server view

我想创建一个视图,它将显示与它从

查询的表相同的属性
CREATE VIEW Agent_View
AS 
SELECT * FROM Agent_table

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

我是否需要将 Agent_View 声明为schemabound以创建索引。是否有任何解决方法来创建索引而不声明为schemabound?

3 个答案:

答案 0 :(得分:3)

您无法使用SELECT *在视图上创建索引,因为您无法WITH SCHEMABINDING

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

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

答案 1 :(得分:2)

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

因此,如果您在agent_name中编入了agent_table,并执行了以下查询:

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

......优化器会将其重写为:

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

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

答案 2 :(得分:1)

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

MSDN reference