Saya bermain-main dengan Result Cache tempo hari…Saya tahu…ini bukan fitur baru dan telah tersedia untuk sementara waktu. Sayangnya, mungkin perlu beberapa saat untuk mencapai hal-hal yang saya kira.
Dalam pengujian sederhana saya, saya memiliki kueri yang menunjukkan perilaku ini:
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 disk membaca untuk mengembalikan 1 baris. Aduh! Sekarang jalankan ini melalui Result Cache dan dapatkan beberapa angka yang sangat bagus.
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
Masih 1 baris kembali tetapi nol disk membaca, nol blok saat ini, dan pada dasarnya nol waktu yang telah berlalu. Bagus!
Cache Hasil berfungsi paling baik saat mengembalikan beberapa baris pada tabel yang tidak sering berubah. Operasi DML pada tabel yang mendasarinya akan membatalkan entri Result Cache dan pekerjaan harus dilakukan lagi sebelum disimpan di Result Cache.
Dalam waktu dekat, ketika saya mendapat kesempatan, saya akan mencari tahu dampak variabel pengikatan pada kueri yang menggunakan Cache Hasil.