मैं दूसरे दिन रिजल्ट कैश के साथ खेल रहा था ... मुझे पता है ... यह कोई नई सुविधा नहीं है और कुछ समय के लिए उपलब्ध है। दुर्भाग्य से, मेरे हिसाब से चीजों तक पहुंचने में कुछ समय लग सकता है।
मेरे साधारण परीक्षण में, मेरे पास एक प्रश्न था जो इस व्यवहार को प्रदर्शित करता था:
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
1 पंक्ति वापस करने के लिए 75,000 डिस्क पढ़ता है। आउच! अब इसे रिजल्ट कैश के माध्यम से चलाएं और कुछ बहुत अच्छे नंबर प्राप्त करें।
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 संचालन परिणाम कैश प्रविष्टि को अमान्य कर देगा और परिणाम कैश में संग्रहीत किए जाने से पहले कार्य को नए सिरे से करने की आवश्यकता होगी।
कभी-कभी, जब मुझे मौका मिलता है, तो मैं परिणाम कैश का उपयोग करने वाली क्वेरी पर बाइंड वैरिएबल के प्रभाव का पता लगाने जा रहा हूं।