【问题标题】:Query optimization in SQLSQL中的查询优化
【发布时间】:2020-05-19 19:03:34
【问题描述】:

我必须优化几个查询的物理设计。我尝试了几种技术,例如索引或集群,但在大多数查询中,就一致获取而言,最佳选择是创建物化视图。有什么理由不选择物化视图来优化查询?因为如果我们可以只使用物化视图来优化所有查询,一切都会变得更加容易和快捷。

【问题讨论】:

  • 添加您已经完成的工作...显示努力... sql 查询。请改进您的问题。
  • 索引没有帮助似乎很奇怪。它们是从数据库中快速检索数据的常用方法。 (当然,如果您从一个表中选择了很多行,那么通过索引进行访问就没有意义了。)您可能希望显示您的一个查询,以便我们可以就它提供建议。也许你只是选择了不合适的索引。
  • SELECT * FROM ( SELECT * FROM ( SELECT director, avg(coms) meancomm FROM (SELECT title,director,count('c') coms FROM cmets GROUP BY title,director) GROUP BY director ) ORDER BY meancomm DESC ) WHERE rownum=1
  • 这可能是一个例子

标签: sql oracle optimization view


【解决方案1】:

您可以使用物化视图进行优化。根据我的经验,它们有一个主要缺点:时间。物化视图并非全部同时更新。

因此,您认为可能相关的不同表可能会丢失行。举个简单的例子,你可能有一个从 T1 到 T2 的外键关系。然而,T2 在T1 之前实现。然后,当 T1 物化时,一些外键值可能会丢失。我花了很多时间来处理由此引起的问题。

有一些方法可以对此进行调整。例如,所有行都可以具有创建日期,而物化视图可以将行限制为仅在前一小时边界内创建或更新的行。

在性能和维护方面还有其他问题。例如,您的数据库负载可能会转向物化视图。或者视图可能由于底层架构更改而失败。但是,一旦您制定了流程,您可能会发现这些流程非常易于管理。

【讨论】:

    【解决方案2】:

    对于像 OLTP 这样的应用程序,它没有意义,因为查询不会读取大量数据。

    对于某些应用程序,例如数据仓库应用程序,它可能是一种选择,但有时可用于创建物化视图 (MV) 的 SQL 语句存在限制。

    而且通常必须考虑刷新 MV 的成本:如果您不想要过时的数据,刷新应该是自动的,并且需要考虑一些开销。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 2013-01-10
      • 2014-02-04
      • 2014-11-16
      • 2011-06-22
      相关资源
      最近更新 更多