我要优化几个查询的物理设计。我尝试过几种技术,比如索引或集群,但在大多数查询中,一致get的最佳选择是创建一个物化视图。有没有理由不选择物化视图来优化查询?因为如果我们可以只使用物化视图优化所有查询,那么一切都会变得更简单、更快。
06odsfpq1#
可以使用物化视图进行优化。以我的经验,他们有一个主要的缺点:时间。物化视图并非完全同时更新。因此,您认为可能相关的不同表可能缺少行。举个简单的例子,您可能有一个从t1到t2的外键关系。然而,t2在t1之前被具体化。当t1具体化时,一些外键值可能会丢失。我花了很多时间来处理这些问题。有很多方法可以适应这种情况。例如,所有行都可以有创建日期,而物化视图只能将行限制为创建或更新到上一个小时边界的行。在性能和维护方面还有其他问题。例如,数据库负载可能会转移到具体化视图。或者视图可能由于底层架构更改而失败。然而,一旦你有了一个合适的流程,你可能会发现这些都是可以管理的。
htrmnn0y2#
对于某些应用程序(如oltp),这是没有意义的,因为查询不会读取大量数据。对于一些应用程序(如数据仓库应用程序),这可能是一个选项,但有时可以使用sql语句来创建物化视图(mv)。一般来说,必须考虑刷新mv的成本:如果您不想要过时的数据,那么刷新应该是自动的,并且需要考虑一些开销。
2条答案
按热度按时间06odsfpq1#
可以使用物化视图进行优化。以我的经验,他们有一个主要的缺点:时间。物化视图并非完全同时更新。
因此,您认为可能相关的不同表可能缺少行。举个简单的例子,您可能有一个从t1到t2的外键关系。然而,t2在t1之前被具体化。当t1具体化时,一些外键值可能会丢失。我花了很多时间来处理这些问题。
有很多方法可以适应这种情况。例如,所有行都可以有创建日期,而物化视图只能将行限制为创建或更新到上一个小时边界的行。
在性能和维护方面还有其他问题。例如,数据库负载可能会转移到具体化视图。或者视图可能由于底层架构更改而失败。然而,一旦你有了一个合适的流程,你可能会发现这些都是可以管理的。
htrmnn0y2#
对于某些应用程序(如oltp),这是没有意义的,因为查询不会读取大量数据。
对于一些应用程序(如数据仓库应用程序),这可能是一个选项,但有时可以使用sql语句来创建物化视图(mv)。
一般来说,必须考虑刷新mv的成本:如果您不想要过时的数据,那么刷新应该是自动的,并且需要考虑一些开销。