代码之家  ›  专栏  ›  技术社区  ›  Eugeniu Torica

如何在视图上创建聚集索引

  •  3
  • Eugeniu Torica  · 技术社区  · 16 年前

    如何在SQLServer2008中的视图上创建聚集索引。 视图不是一个真正的表,所以聚集索引创建的数据的物理排列并没有意义。

    我哪里没抓住要点?

    3 回复  |  直到 16 年前
        1
  •  3
  •   gbn    16 年前

    MSDN White paper 带着解释

        2
  •  2
  •   Philip Kelley    16 年前

    这是一个稍微简化的解释。引擎盖下有很多技术上的呼呼声,但听起来你需要一个“wassup”的解释。

    视图本质上是一个预先编写和存储的查询;无论何时访问该视图,都会检索预写的查询并将其插入当前查询中。(至少我是这么想的。)

    如果表A非常大,并且您希望快速访问表的一小部分(例如仅2-3列,或者仅当状态=1时,或者您希望快速访问需要丑陋联接才能生成的数据),则此选项非常有用

    当您更新表A(实际上是视图引用的任何表)时,乐趣就来了,因为对“基本”表的任何更改也必须对“视图”表进行。在大量使用的OLTP系统中,这不是一个好主意。

        3
  •  2
  •   Quassnoi    16 年前

    虽然视图不是真实的对象,但聚集索引是真实的。

    并且可以对视图返回的行进行排序和存储。

    大多数情况下,它们确保结果被持久化,并且可以在视图中轻松跟踪对基础表的更新(这样,在每次更新基础表时就不必重建索引)。

    例如, SUM(*) COUNT_BIG(*) 是分配函数:

    SUM(set1) + SUM(set2) = SUM(set1 + set2)
    COUNT_BIG(set1) + COUNT_BIG(set2) = COUNT_BIG(set1 + set2)
    

    ,因此很容易重新计算 SUM COUNT_BIG 更改表时,仅使用视图行和受影响列的值。