Oracle
 sql >> база данни >  >> RDS >> Oracle

Кеш на резултатите

Онзи ден си играех с кеша на резултатите… знам… това не е нова функция и е налична от известно време. За съжаление, може да отнеме известно време, за да стигнем до нещата, които предполагам.

В моя прост тест имах заявка, която показа това поведение:

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 четения на диска за връщане на 1 ред. Оу! Сега прокарайте това през кеша на резултатите и вземете някои наистина хубави числа. 🙂

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

Все пак се върна 1 ред, но нула четене на диск, нулеви текущи блокове и основно нулево изминало време. Хубаво!

Кешът на резултатите работи най-добре, когато връща няколко реда в таблици, които не се променят често. DML операциите върху основните таблици ще анулират записа в кеша на резултатите и работата ще трябва да бъде извършена наново, преди да бъде съхранена в кеша на резултатите.

Някога скоро, когато имам възможност, ще разбера влиянието на променливите за свързване върху заявки, които използват кеша на резултатите.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка в SQL Oracle LEFT JOIN и SUBQUERY:ORA-00905:липсва ключова дума

  2. Начин да проверите завършения sql на Oracle

  3. oci_connect връзката неуспешна

  4. Как да пренасоча изхода на DBMS_OUTPUT.PUT_LINE към файл?

  5. 4 начина за вмъкване на няколко реда в Oracle