【发布时间】:2021-01-24 21:57:41
【问题描述】:
我有许多 sql 查询,它们以year 为参数并生成给定年份的各种年度报告。
这些查询非常繁琐,需要相当长的时间来执行(20 分钟 - 40 分钟)。
为了让我的用户能够在需要时查看年度报告,我正在考虑预先执行这些查询并存储结果以供以后使用。
一种解决方案是安排这些查询的执行并将结果插入到一些临时表中。
但我正在寻找一种更聪明的方法,这种方法不涉及为所有这些查询编写数十个执行立即语句或自定义插入。
任何想法将不胜感激。另外我不知道是否可以为此使用物化视图。
预期结果将是带有年份列的表格或视图,以便用户可以对任何年份执行快速搜索。
例如
product_id |annual_sales|max_price|min_price|year
124|1200,56|80|50|2019
124|1400,00|85|55|2020
【问题讨论】:
-
除了说“是的,物化视图通常是要使用的技术”之外,我不太确定您要寻找什么样的答案。您是否尝试过使用物化视图?您在实施它们时遇到问题吗?让查询重写工作?还有什么?
-
@JustinCave 首先,我不确定 MV 是否是正确的选择 - 你已经介绍过了。我对 MV 的一个担忧是(如果我理解正确的话)我应该通过删除
where myyear=year子句并按年份分组来重写我的查询。但是一年的结果需要 40 分钟才能完成...不会是查询组有问题的缓慢...而且理想情况下我需要每年收集一次过去几年的数据..而不是重新计算每年已经计算过了……我可以用物化视图来做吗? -
@JustinCave 你能看看我的新问题,并告诉我你对 MV 的建议是否仍然有效? stackoverflow.com/questions/64302432/… 谢谢。
标签: sql oracle scheduled-tasks data-warehouse materialized-views