2015-02-05 94 views
0

我真的不知道如何甚至要求我需要什么。 所以我试着解释我的情况。SQL替代视图

我有一个相当简单的sql查询连接各种表,但我需要执行此查询与一些不同的条件反复。

查询的执行时间大约为0.25秒。 但我需要执行的所有查询都需要15秒。 这是很长的路要走。

我需要的是一张表或视图,它为我保存了查询结果,这样我只需要从这张表中选择而不是一次又一次地连接大表。

视图不会真的有帮助,因为它只会一遍又一遍地执行相同的查询。我所知道的。

有没有办法让东西像一个持有其数据的视图,只要其源表没有改变?如果真的有必要,只会更新和执行查询?

+0

试过索引视图吗?您可以创建一个索引视图,以迎合所有不同的条件,然后选择查询可以选择它需要的子集。 – SoulTrain 2015-02-05 15:07:10

+2

根据您的DBMS,您可能想要查看物化视图。你正在使用哪个DBMS? Postgres的?甲骨文?您还应该向我们展示您必须运行的查询。 – 2015-02-05 15:07:22

+0

我在oracle 11g上工作,这些物化视图看起来很有希望。 – ZSchneidi 2015-02-05 15:12:18

回答

2

我想,你所描述的非常好的拟合至

物化视图

使用与承诺快速刷新。但是,您的查询需要符合快速刷新的条件。

另一种使用

RESULT_CACHE

  • 它是自动当源表中的一个被改变无效。我会试着决定哪个套房更适合这个特定的任务。
+0

谢谢,我会给这两种方法一试,看看哪一个表现最好。 – ZSchneidi 2015-02-27 11:20:06

1

我会为此建议表值函数。定义这样一个函数需要用PL/SQL进行编码,但是如果函数是基于单个查询的话就不那么难。

您可以将这些功能看作参数化视图的一种方式。

Here是开始了解它们的好地方。

+0

嗨,是不是这些表函数的问题,他们会执行每次我打电话给他们?这基本上是我试图避免的。 – ZSchneidi 2015-02-05 15:25:08

+0

@ZSchneidi。 。 。表值函数应该针对输入进行优化。物化视图会导致在基础表发生更改时维护数据集的开销。此外,它并未针对使用一组参数的单个查询进行优化。 – 2015-02-05 21:53:28