【发布时间】:2020-10-11 20:16:48
【问题描述】:
考虑以下场景:
我有一张包含 100 万个产品 ID products 的表格:
create table products (
pid number,
p_description varchar2(200)
)
还有一个比较慢的功能
function gerProductMetrics(pid,date) return number
返回给定产品在给定日期的一些指标。
每年还有一份基于以下查询的年度报告:
select pid,p_description,getProductMetrics(pid,'2019-12-31') from
products
该查询在给定年份执行大约需要 20-40 分钟。
使用以下方法为此场景创建物化视图 (MV) 是否正确
CREATE TABLE mydates
(
mydate date
);
INSERT INTO mydates (mydate)
VALUES (DATE '2019-12-31');
INSERT INTO mydates (mydate)
VALUES (DATE '2018-12-31');
INSERT INTO mydates (mydate)
VALUES (DATE '2017-12-31');
CREATE MATERIALIZED VIEW metrics_summary
BUILD IMMEDIATE
REFRESH FORCE ON DEMAND
AS
SELECT pid,
getProductMetrics(pid,mydate AS annual_metric,
mydate
FROM products,mydates
还是要等很久?
另外,我会多久更新一次这个 MV?
需要每年年底的指标数据。
但可以随时请求任何年份的数据。
请注意,我无法控制慢速功能 - 这只是给定的。 谢谢。
【问题讨论】:
-
也许可以将getProductMetrics 功能转换为纯sql 并获得相同的数据,而无需使用该功能。我不知道,因为不清楚它的作用,但我已经看到了完全可能的情况。
-
@KoenLostrie 我知道你的意思......但遗憾的是,现在替换函数不是一个选项。
标签: sql oracle optimization materialized-views