जब आप संकेत शामिल करते हैं तो क्या आपको अलग-अलग क्वेरी प्लान मिलते हैं? मेरी धारणा यह है कि आप समस्या के अपने विवरण के आधार पर ऐसा करते हैं।
जब आप Oracle में कोई क्वेरी निष्पादित करते हैं, तो डेटाबेस आम तौर पर किसी भी समय सेट किए गए पूरे परिणाम को अमल में नहीं लाता है (जाहिर है, यदि आप ORDER BY
निर्दिष्ट करते हैं तो यह आवश्यक हो सकता है। क्लॉज जिसके लिए सॉर्ट होने से पहले सभी डेटा को अमल में लाना आवश्यक है)। जब तक क्लाइंट डेटा प्राप्त करना शुरू नहीं करता तब तक ओरेकल वास्तव में डेटा को भौतिक बनाना शुरू नहीं करता है। यह उत्पन्न करने के लिए पर्याप्त क्वेरी चलाता है, हालांकि क्लाइंट ने कई पंक्तियों को लाने के लिए कहा है (जो ऐसा लगता है कि आपके मामले में 10 है), उन परिणामों को क्लाइंट को लौटाता है, और क्लाइंट को प्रक्रिया जारी रखने से पहले अधिक डेटा का अनुरोध करने की प्रतीक्षा करता है। क्वेरी।
ऐसा लगता है जब FIRST_ROWS
संकेत शामिल है, तो क्वेरी योजना इस तरह से बदल रही है जिससे इसे निष्पादित करना अधिक महंगा हो गया है। जाहिर है, यह FIRST_ROWS
का लक्ष्य नहीं है संकेत देना। लक्ष्य ऑप्टिमाइज़र को एक योजना बनाने के लिए कहना है जो पहली एन पंक्तियों को और अधिक कुशल बनाता है, भले ही यह क्वेरी से सभी पंक्तियों को कम कुशल बनाता है। यह ऑप्टिमाइज़र को टेबल स्कैन पर इंडेक्स स्कैन जैसी चीजों का पक्ष लेने का कारण बनता है जहां एक टेबल स्कैन समग्र रूप से अधिक कुशल हो सकता है। ऐसा लगता है कि आपके मामले में, हालांकि, अनुकूलक के अनुमान गलत हैं और यह एक ऐसी योजना चुनता है जो आम तौर पर कम कुशल होती है। इसका अक्सर यह अर्थ होता है कि आपकी क्वेरी जिन कुछ वस्तुओं का संदर्भ दे रही है उनमें से कुछ आंकड़े अपूर्ण या गलत हैं।