Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

जब क्वेरी में FIRST_ROWS या ROWNUM प्रतिबंध हो तो ResultSet.next बहुत धीमा होता है

जब आप संकेत शामिल करते हैं तो क्या आपको अलग-अलग क्वेरी प्लान मिलते हैं? मेरी धारणा यह है कि आप समस्या के अपने विवरण के आधार पर ऐसा करते हैं।

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

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle माइनस ऑपरेटर समझाया गया

  2. लेफ्ट जॉइन में अस्पष्टता (केवल ओरेकल?)

  3. मुझे इस सीएलओबी क्षेत्र के गेटऑर्डिनल फ़ंक्शन में आउटऑफरेंज अपवाद क्यों मिलता है?

  4. कैसे SID Oracle में सेवा नाम से अलग है tnsnames.ora

  5. Oracle में, क्या किसी तालिका में स्तंभ सम्मिलित करना संभव है?