【问题标题】: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 的情况下创建索引?

【问题讨论】:

  • 我认为您不需要在视图上创建索引。将使用表的索引。

标签: sql-server view


【解决方案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

      【讨论】:

        猜你喜欢
        • 2011-02-15
        • 2011-08-01
        • 1970-01-01
        • 2019-08-05
        • 1970-01-01
        • 2020-07-21
        • 2011-08-13
        • 2023-03-16
        • 2013-05-31
        相关资源
        最近更新 更多