代码之家  ›  专栏  ›  技术社区  ›  Sam Cogan

SQL视图或表

  •  8
  • Sam Cogan  · 技术社区  · 14 年前

    我有一个每周更新一次的数据表。然后我有一个处理这些数据的查询,基本上返回一个代码列表和预订到这些代码的小时数。这个查询相当复杂,运行大约需要5秒钟。

    这个数据需要被数据库中的许多其他查询使用,所以我想把它放在一个可以被其他查询轻松访问的地方。在视图中这样做似乎是个好主意,但这意味着每次调用这个视图时,它都会重新运行这个查询,需要5秒钟,如果一次调用这个视图的次数很多,那么它将转到CA。使用应用程序减速。

    所以我在想,在星期一导入数据时,最好将此视图创建为表,因为这是唯一一次更改。这是个好主意,还是我看的不对?

    7 回复  |  直到 14 年前
        1
  •  2
  •   Paul Alan Taylor    14 年前

    我的大多数项目都处理相同的问题。

    我们有大量的数据需要为不同的目的进行重组。我们还受益于一种用于批处理作业和夜间处理的企业文化,因此用户可以很好地了解数据的快照性质。大多数用户要做的第一件事就是将数据导出到Excel,所以这是一个没有问题的问题。

    使用额外的表是一种明智的方法。

    就我个人而言,我在这些表前面加了一个下划线。

    _LargeUsefulData
    

    这使我能够轻松地从在系统正常操作中起作用的实体中识别便利表。

        2
  •  3
  •   Arthur    14 年前

    一位同事向我指出了“物化的观点”。

    http://www.pgcon.org/2008/schedule/attachments/64_BSDCan2008-MaterializedViews-paper.pdf

    基本上,您将数据从一个视图复制到一个表中,并将这个表用作一个视图。该表示(链接)中的要点是,您可以使用触发器和函数只更新该表的某些部分。

    非常有用,我在SQL Server中实现了这样一个物化视图。

        3
  •  2
  •   Oded    14 年前

    这听起来是一个合理的方法。

    由于查询很昂贵,将结果放入“report”表中供其他应用程序使用听起来是一个很好的折衷方案。

    只要这些数据的用户满意它按照您描述的方式进行更改,您的方法就可以了。

        4
  •  1
  •   Quassnoi    14 年前

    如果视图结构允许对其进行索引,则可以创建一个索引视图(它实际上只是在基础表更新时更新的数据的副本)。

    然而,并非每个查询都允许对视图进行索引。

    如果数据不是秒到秒的实际值,则创建表是 OK .

        5
  •  0
  •   Kris Krause    14 年前

    您仍在“查看”行,无论是在表中还是在表行的视图中。

    我将首先尝试优化您的查询(点击您的索引,可能添加/更新/更改您的索引),然后通过分析器运行它。资料员提供了极好的洞察力…进入数据库的决策计划。

        6
  •  0
  •   sergiom    14 年前

    是的,这是数据仓库发展方向的第一步。) 当然,您应该确保新表总是在每周更新之后构建的。

        7
  •  0
  •   Tom H    14 年前

    我在生产支持中遇到过类似的问题,我需要处理一个大型数据仓库。基本上,我所做的就是使用shell脚本创建表。shell脚本的运行方式如下:

    1. 如果临时表存在,则删除 它。
    2. 通过创建表来运行查询 就像创建表X一样(选择….)
    3. 使用临时表和 创建为临时 桌子/高超。
    4. 如果不删除临时表 再需要它,如果你 别以为它会吃了你的碟子 空间。

    所有这些都可以使用一个简单的shell脚本来完成。我发现它非常有用,即使现在它也在有效运行。