क्वेरी को संशोधित किए बिना किसी योजना को नियंत्रित करने के कम से कम 11 तरीके हैं। वे उपयोगिता के क्रम में मोटे तौर पर नीचे सूचीबद्ध हैं:
- एसक्यूएल प्लान बेसलाइन - एक योजना को दूसरी योजना से बदलें।
- एसक्यूएल प्रोफाइल - योजनाओं में "सुधारात्मक" संकेत जोड़ें। उदाहरण के लिए, एक प्रोफ़ाइल कह सकती है कि "यह जुड़ाव अपेक्षा से 100 गुना अधिक पंक्तियाँ लौटाता है", जो अप्रत्यक्ष रूप से योजना को बदल देता है।
- संग्रहीत रूपरेखा - एसक्यूएल प्लान बेसलाइन के समान, लेकिन कम सुविधाओं के साथ। यह विकल्प उपयोग में आसान है लेकिन कम शक्तिशाली है और अब समर्थित नहीं है।
- DBMS_STATS.SET_X_STATS - तालिका, कॉलम और इंडेक्स के आंकड़ों को मैन्युअल रूप से संशोधित करने से वस्तुओं को कृत्रिम रूप से अधिक या कम खर्चीला बनाकर योजनाओं को महत्वपूर्ण रूप से बदल सकते हैं।
- सत्र नियंत्रण - उदाहरण के लिए
alter session set optimizer_features_enable='11.2.0.3';
. हमेशा सहायक पैरामीटर नहीं होते हैं। लेकिन OPTIMIZER_* पैरामीटर में से एक मदद कर सकता है, या आप एक अनिर्दिष्ट संकेत के साथ योजना को बदलने या इस तरह की सुविधा को अक्षम करने में सक्षम हो सकते हैं:alter session set "_fix_control"='XYZ:OFF';
बदलें - सिस्टम नियंत्रण - ऊपर के समान लेकिन पूरे सिस्टम पर लागू होता है।
- DBMS_SPD - SQL योजना निर्देश एक प्रोफ़ाइल के समान है जिसमें यह अनुकूलक को कुछ सुधारात्मक जानकारी प्रदान करता है। लेकिन यह निचले स्तर पर, सभी योजनाओं में काम करता है, और 12c के लिए नया है।
- DBMS_ADVANCED_REWRITE - एक क्वेरी को दूसरी क्वेरी में बदलें।
- वर्चुअल निजी डेटाबेस - विधेय जोड़कर किसी क्वेरी को दूसरी क्वेरी में बदलें। यह प्रदर्शन के लिए अभिप्रेत नहीं है, लेकिन आप शायद इंडेक्स एक्सेस पथ बदलने के लिए इसका दुरुपयोग कर सकते हैं।
- एसक्यूएल अनुवाद फ्रेमवर्क - किसी क्वेरी को पार्स किए जाने से पहले, किसी अन्य क्वेरी में बदलें। यह पूरी तरह से "गलत" SQL को चलने में सक्षम कर सकता है।
- एसक्यूएल पैच (dbms_sqldiag internal.i_create_patch) - एक क्वेरी को दूसरी क्वेरी में बदलें। DBMS_ADVANCED_REWRITE के समान लेकिन यह अनिर्दिष्ट है और शायद थोड़ा अधिक शक्तिशाली है।