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

Risultato cache

L'altro giorno stavo giocando con la Cache dei risultati... lo so... questa non è una nuova funzionalità ed è disponibile da un po'. Sfortunatamente, può volerci un po' per arrivare a cose che credo.

Nel mio semplice test, ho avuto una query che mostrava questo comportamento:

select
   max(det.invoice_date)
from
   invoices i
join
   invoice_detail det
on i.dept_id=det.dept_id
 
call    count       cpu   elapsed       disk      query   current       rows
------- ------  -------  -------- ---------- ---------- ---------  ---------
Parse        1     0.00      0.00          0          0          0         0
Execute      1     0.00      0.00          0          0          0         0
Fetch        2     2.77      6.66      75521      75583          0         1
------- ------  -------  -------- ---------- ---------- ---------- ---------
total        4     2.77      6.67      75521      75583          0         1

75.000 letture del disco per restituire 1 riga. Ahia! Ora esegui questo attraverso la Cache dei risultati e ottieni dei numeri davvero carini. 🙂

select
   /*+ result_cache */
   max(det.invoice_date)
from
   invoices i
join
   invoice_detail det
   on i.dept_id=det.dept_id
 
call     count     cpu   elapsed       disk      query    current       rows
------- ------  ------ --------- ---------- ---------- ----------  ---------
Parse        1    0.00      0.00          0          0          0          0
Execute      1    0.00      0.00          0          0          0          0
Fetch        2    0.00      0.00          0          0          0          1
------- ------  ------ --------- ---------- ---------- ----------  ---------
total        4    0.00      0.00          0          0          0          1

Ancora 1 riga restituita ma zero letture del disco, zero blocchi correnti e praticamente zero tempo trascorso. Bello!

La cache dei risultati funziona meglio quando restituisce un numero limitato di righe su tabelle che non cambiano spesso. Le operazioni DML sulle tabelle sottostanti invalideranno la voce della Cache dei risultati e il lavoro dovrà essere eseguito di nuovo prima che venga archiviato nella Cache dei risultati.

Presto, quando ne avrò la possibilità, capirò l'impatto delle variabili di binding sulle query che utilizzano la Cache dei risultati.