Una vista materializada sería una excelente opción para lo que está buscando hacer. De esta manera, puede escribir la consulta una vez para la vista y luego hacer que los datos en la vista materializada se actualicen con la frecuencia que desee. Puede tener un trabajo que actualice los datos una vez por noche, los fines de semana o la frecuencia que elija.
Después de crear la vista materializada, también puede agregar índices encima de la vista materializada para ayudar con el rendimiento de la consulta, si así lo desea.
A continuación se puede ver un ejemplo rápido sobre cómo crear una vista materializada.
CREATE TABLE sale
(
product_id NUMBER,
sale_date DATE,
sale_amount NUMBER
);
INSERT INTO sale (product_id, sale_date, sale_amount)
VALUES (124, DATE '2019-02-01', 40.25);
INSERT INTO sale (product_id, sale_date, sale_amount)
VALUES (124, DATE '2019-02-01', 80.99);
INSERT INTO sale (product_id, sale_date, sale_amount)
VALUES (124, DATE '2020-02-01', 30.50);
INSERT INTO sale (product_id, sale_date, sale_amount)
VALUES (124, DATE '2020-02-01', 46.75);
CREATE MATERIALIZED VIEW sales_summary
BUILD IMMEDIATE
REFRESH FORCE ON DEMAND
AS
SELECT product_id,
SUM (sale_amount) AS annual_sales,
MAX (sale_amount) AS max_price,
MIN (sale_amount) AS min_price,
EXTRACT (YEAR FROM sale_date) AS year
FROM sale
GROUP BY product_id, EXTRACT (YEAR FROM sale_date);
Resultado
select * from sales_summary;
PRODUCT_ID ANNUAL_SALES MAX_PRICE MIN_PRICE YEAR
_____________ _______________ ____________ ____________ _______
124 121.24 80.99 40.25 2019
124 77.25 46.75 30.5 2020