Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Pamięć podręczna wyników

Niedawno bawiłem się z pamięcią podręczną wyników… wiem… to nie jest nowa funkcja i była dostępna od jakiegoś czasu. Niestety, dotarcie do rzeczy, które myślę, może trochę potrwać.

W moim prostym teście miałem zapytanie, które wykazywało to zachowanie:

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 odczytów dysku, aby zwrócić 1 wiersz. Auć! Teraz przeprowadź to przez pamięć podręczną wyników i uzyskaj naprawdę ładne liczby.

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

Nadal zwrócił 1 wiersz, ale zero odczytów dysku, zero bloków prądu i zasadniczo zero czasu, który upłynął. Fajnie!

Pamięć podręczna wyników działa najlepiej, gdy zwraca kilka wierszy w tabelach, które nie zmieniają się często. Operacje DML na bazowych tabelach unieważnią wpis w pamięci podręcznej wyników, a praca będzie musiała zostać wykonana od nowa, zanim zostanie zapisana w pamięci podręcznej wyników.

Niedługo, kiedy będę miał okazję, zorientuję się, jaki wpływ mają zmienne wiązania na zapytania korzystające z pamięci podręcznej wyników.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co jest nie tak z tym PL/SQL? Bind Variable * NIE JEST ZADEKLAROWANY

  2. Pierwsze kroki z Oracle Application Express-APEX

  3. Jaki jest najlepszy sposób sprawdzenia, z której wersji klienta Oracle korzystam?

  4. Funkcja SUBSTR() w Oracle

  5. Jak utworzyć obiekt oracle.sql.ARRAY?