Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Sammeln jährlich aggregierter Daten für einen späteren schnellen Zugriff

Eine materialisierte Ansicht wäre eine großartige Option für das, was Sie tun möchten. Auf diese Weise können Sie die Abfrage einmal für die Ansicht schreiben und dann die Daten in der materialisierten Ansicht so oft aktualisieren, wie Sie möchten. Sie können einen Job haben, der die Daten einmal pro Nacht, an den Wochenenden oder in einer von Ihnen gewählten Häufigkeit aktualisiert.

Nachdem die materialisierte Ansicht erstellt wurde, können Sie der materialisierten Ansicht auch Indizes hinzufügen, um die Abfrageleistung zu verbessern, wenn Sie dies wünschen.

Ein kurzes Beispiel zum Erstellen einer materialisierten Ansicht finden Sie unten.

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);

Ergebnis

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