नहीं, यह गलत हो सकता है।
यदि आपके पास बड़ी तालिका है, तो Oracle
तालिका से बजाय इंडेक्स से फ़ील्ड प्राप्त करना पसंद कर सकता है, यहां तक कि कोई भी इंडेक्स नहीं है जो सभी मानों को कवर करता है।
अपने ब्लॉग में नवीनतम लेख में:
, वहाँ एक प्रश्न है, जिसमें Oracle
पूर्ण तालिका स्कैन का उपयोग नहीं होता है बल्कि एक के इंडेक्स में शामिल स्तंभ मान प्राप्त करने के लिए है:
SELECT l.id, l.value
FROM t_left l
WHERE NOT EXISTS
(
SELECT value
FROM t_right r
WHERE r.value = l.value
)
योजना है:
SELECT STATEMENT
HASH JOIN ANTI
VIEW , 20090917_anti.index$_join$_001
HASH JOIN
INDEX FAST FULL SCAN, 20090917_anti.PK_LEFT_ID
INDEX FAST FULL SCAN, 20090917_anti.IX_LEFT_VALUE
INDEX FAST FULL SCAN, 20090917_anti.IX_RIGHT_VALUE
जैसा कि आप देख सकते हैं, t_left
पर कोई TABLE SCAN
नहीं है।
इसके बजाय, Oracle
id
और value
सूचक ले जाता है, उन्हें rowid
पर जुड़ जाता है और शामिल होने के परिणाम से (id, value)
जोड़े हो जाता है।
अब, आपकी क्वेरी के लिए:
SELECT *
FROM some_table
WHERE field_one is not null and field_two = ?
GROUP BY
field_three, field_four, field_five
सबसे पहले, यह संकलन नहीं होगा, जब से तुम एक GROUP BY
खंड के साथ एक मेज से *
चुन रहे हैं।
आपको समूह कॉलम और गैर-समूह कॉलम के समेकन के आधार पर *
को अभिव्यक्तियों के साथ प्रतिस्थापित करने की आवश्यकता है। ,
CREATE INDEX ix_sometable_23451 ON some_table (field_two, field_three, field_four, field_five, field_one)
के बाद से यह field_two
पर दोनों को छानने के लिए सब कुछ शामिल होंगे, field_three, field_four, field_five
(GROUP BY
के लिए उपयोगी) पर छंटाई और सुनिश्चित करते हुए कि field_one
NOT NULL
है:
आप सबसे शायद निम्नलिखित सूचकांक से लाभ होगा।
+1 ऑप्टिमाइज़र का उल्लेख करने के लिए, शायद यह संभवतः इसका सबसे संभावित कारण है। –
प्रतिक्रिया के लिए धन्यवाद। मुझे एहसास नहीं हुआ कि व्याख्या योजना तालिका में डेटा की मात्रा पर निर्भर है। वर्तमान में तालिका में कोई डेटा नहीं है, जो बताता है कि क्यों ऑप्टिमाइज़र अन्य इंडेक्स को छोड़ सकता है। एक और नोट पर, फ़ील्ड_फ्री के बिना फ़ील्ड_थ्री और field_four पर एक समग्र इंडेक्स अभी भी उपरोक्त की तरह क्वेरी में उपयोग किया जाएगा? इसमें क्लॉज द्वारा समूह के सभी फ़ील्ड शामिल नहीं होंगे। – onejigtwojig
@ मार्क - जो इसे समझाता है। समूह के लिए ओरेकल द्वारा उपयोग किए जाने वाले इंडेक्स के बारे में अधिक जानकारी के लिए मेरे संपादन देखें। –