अधिकतम प्रदर्शन को लक्ष्य मानते हुए, मैं आदर्श रूप से SUBSTR(my_field,1,6)
चुनूंगा और क्वेरी का समर्थन करने के लिए फ़ंक्शन-आधारित अनुक्रमणिका बनाएं।
CREATE INDEX my_substr_idx
ON my_table( substr( my_field,1,6 ) );
जैसा कि अन्य बताते हैं, SUBSTR(my_field,1,6)
MY_FIELD
. पर नियमित अनुक्रमणिका का उपयोग करने में सक्षम नहीं होगा . LIKE संस्करण इंडेक्स का उपयोग कर सकता है, लेकिन उस मामले में ऑप्टिमाइज़र का कार्डिनैलिटी अनुमान आम तौर पर खराब होता है, इसलिए यह या तो इंडेक्स का उपयोग नहीं करने की काफी संभावना है जब यह मददगार होगा या एक इंडेक्स का उपयोग करने के लिए जब टेबल स्कैन बेहतर होगा। वास्तविक एक्सप्रेशन को इंडेक्स करने से ऑप्टिमाइज़र को काम करने के लिए कहीं अधिक जानकारी मिलेगी, इसलिए यह इंडेक्स को सही ढंग से चुनने की अधिक संभावना है। मुझसे ज्यादा होशियार कोई व्यक्ति 11g में वर्चुअल कॉलम पर आँकड़ों का उपयोग करने का तरीका सुझा सकता है ताकि ऑप्टिमाइज़र को LIKE क्वेरी के लिए बेहतर जानकारी मिल सके।
यदि 6 एक चर है (यानी आप कभी-कभी पहले 6 वर्णों को खोजना चाहते हैं और कभी-कभी एक अलग संख्या खोजना चाहते हैं), तो संभवतः आप उस क्वेरी का समर्थन करने के लिए फ़ंक्शन-आधारित अनुक्रमणिका के साथ नहीं आ पाएंगे। उस स्थिति में, आप शायद LIKE फॉर्मूलेशन के साथ ऑप्टिमाइज़र के निर्णयों की अनिश्चितताओं से बेहतर हैं।