sql >> Base de Datos >  >> RDS >> Oracle

Caché de resultados

Estuve jugando con Result Cache el otro día... Lo sé... esta no es una característica nueva y ha estado disponible por un tiempo. Desafortunadamente, supongo que puede llevar un tiempo llegar a las cosas.

En mi prueba simple, tuve una consulta que mostraba este comportamiento:

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 lecturas de disco para devolver 1 fila. ¡Ay! Ahora ejecute esto a través de la memoria caché de resultados y obtenga algunos números realmente buenos. 🙂

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

Todavía se devolvió 1 fila pero cero lecturas de disco, cero bloques actuales y básicamente cero tiempo transcurrido. ¡Genial!

La caché de resultados funciona mejor cuando devuelve unas pocas filas en tablas que no cambian con frecuencia. Las operaciones DML en las tablas subyacentes invalidarán la entrada de la memoria caché de resultados y el trabajo deberá realizarse de nuevo antes de que se almacene en la memoria caché de resultados.

Dentro de poco, cuando tenga la oportunidad, averiguaré el impacto de las variables de vinculación en las consultas que utilizan la caché de resultados.