sql >> Database teknologi >  >> RDS >> Oracle

indsamle årlige aggregerede data for senere hurtig adgang

En materialiseret udsigt ville være en god mulighed for det, du søger at gøre. På denne måde kan du skrive forespørgslen én gang for visningen, og derefter få dataene i den materialiserede visning opdateret, så ofte du vil. Du kan have et job, der opdaterer dataene én gang pr. nat, i weekenden eller hvilken frekvens du vælger.

Når den materialiserede visning er oprettet, kan du også tilføje indekser oven på den materialiserede visning for at hjælpe med forespørgselsydeevne, hvis du vælger det.

Et hurtigt eksempel på, hvordan man opretter en materialiseret visning, kan ses nedenfor.

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

Resultat

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



  1. Hvordan vælger man forskellige par i MySQL join (samme tabel) med transitivitet?

  2. onCreate() af RoomDatabase.Callback() blev ikke kaldt efter et vellykket kald til .build()

  3. Er der en navnekonvention for MySQL?

  4. Hvorfor bør du ikke bruge mysql_fetch_assoc mere end 1 gang?