Sql server 在SQL Server中,何时应该使用索引视图而不是实际表?

Sql server 在SQL Server中,何时应该使用索引视图而不是实际表?,sql-server,indexed-view,Sql Server,Indexed View,我知道在SQL Server中,您可以在视图上创建索引,然后视图保存基础表中的数据。然后可以查询视图。但是,为什么我需要使用视图而不是表?您可能需要使用视图来简化查询。在我们的项目中,共识是使用接口视图,尤其是“报告接口” 假设你有一个客户表,经理每天早上都要一份报告,上面写着客户的名字和他们的账户余额(或其他)。如果根据表对报表进行编码,则会在报表和表之间创建一个强大的链接,从而使以后的更改变得困难 另一方面,如果你的报告点击了一个视图,你可以自由地扭曲数据库;只要视图与报表的工作方式相同,经

我知道在SQL Server中,您可以在视图上创建索引,然后视图保存基础表中的数据。然后可以查询视图。但是,为什么我需要使用视图而不是表?

您可能需要使用视图来简化查询。在我们的项目中,共识是使用接口视图,尤其是“报告接口”

假设你有一个客户表,经理每天早上都要一份报告,上面写着客户的名字和他们的账户余额(或其他)。如果根据表对报表进行编码,则会在报表和表之间创建一个强大的链接,从而使以后的更改变得困难

另一方面,如果你的报告点击了一个视图,你可以自由地扭曲数据库;只要视图与报表的工作方式相同,经理就会很高兴,您就可以自由地试验数据库。是否要将客户端元数据与主客户端表分开?开始吧,在视图中连接两个表。是否要对客户端的购物车信息进行非规范化?没问题,视图可以调整

老实说,这是我作为一名程序员的观点,但db gurus肯定会发现其他用途:)

基本上,使用视图:

  • 在多个表上多次使用相同的复杂查询时
  • 当新系统需要读取旧表数据,但不注意更改其感知的模式时

  • 索引视图可以通过创建更具体的索引而不增加冗余来提高性能。

    视图只是一个已命名并存储在数据库中的SELECT语句。视图的主要优点是,一旦它被创建,它的作用就像您要编写的任何其他SELECT语句的表

    视图的select语句可以引用表、其他视图和函数

    可以在视图(索引视图)上创建索引以提高性能。索引视图是自更新的,可立即反映对基础表的更改


    如果索引视图只从一个表中选择列,那么最好将索引放在该表上并直接查询该表,该视图只会导致数据库开销。但是,如果SELECT语句包含多个包含联接等的表,则可以通过在视图上放置索引来提高性能。

    表是数据的物理存储位置

    视图是对表进行汇总或分组以使表组更易于使用的位置

    索引视图允许查询使用视图,而不需要从基础表中获取数据,因为该视图已经有了数据,从而提高了性能


    如果不对数据库进行非规范化,仅使用表就无法获得相同的结果,因此可能会产生其他问题。

    使用索引视图的一个优点是可以对2列或更多列的结果进行排序,这些列位于不同的表中。即,有一个视图,它是表1和表2的结果,按表1.column1、表2.column2排序。然后,您可以在第1列、第2列创建一个索引,以优化该查询

    您的经理是否希望每天早上在某个时刻提供一份过时的冻结客户余额的报告?如果他想要实现数据,那么同样的方法是在报表和表之间创建相同的强链接,但通过额外的中介(索引视图)。你说用数据库做实验是什么意思。数据库是玩具吗?尝试视图!我看不出在这种逻辑下有任何合理的理由,他经常这样做。每日销售额可以定义为截止到上一天午夜的所有销售额,这样每个人都运行相同的数字,即使在一小时后运行报告。数据仓库(典型的报告)不是按时间间隔加载的,不是实时加载的。@TomTom,是的,你知道了。此外,您可能有一个非常活跃的服务器,在这个服务器上,对报表接口的复杂查询可能会破坏实际性能。“仅使用表无法获得相同的结果”有什么意义?提取一些数据片段,将它们与数据库隔离。下一步就是删除数据库以最终提高性能。很抱歉,我看不到这个逻辑下的任何有效的理由,如果我可以问一下主题的开头:“但是,为什么我需要使用视图而不是表?”阅读了所有答案后,我仍然看不到使用索引视图而不是实视图的任何可行的理由table@Yousi,你接受的答案没有说太多(或任何与此相关的内容)关于索引视图。由于视图可以连接大型表,并对非索引列应用排序,因此向原始表而不是视图添加索引是否有价值?我已经读到索引视图会增加与底层表的争用,但是如果您的视图是按特定列排序的,为什么其他视图就不会呢?我理解视图在简化查询中的用法,但我不确定我是否理解为什么它更快。你能再解释一下吗?