आपने एक और सवाल पूछा "एक इंडेक्स बनाना जो 40 मिलियन नामों के माध्यम से वाइल्डकार्ड खोज के लिए सबसे अच्छा है"। ठीक है, आपके पास 40 मिलियन रिकॉर्ड हैं।
अब निम्नलिखित सूत्र पर विचार करें:
x = COUNT(DISTINCT values in a column) / COUNT(values in a column)
एक कॉलम पर एक इंडेक्स उतना ही बेहतर होता है, जितना करीब x
1 है। यदि यह 1 है, तो सभी मान अलग हैं, कोई डुप्लिकेट नहीं हैं और इसलिए एक अनुक्रमणिका काफी तेज़ है।
अब आप 'जॉन%' ढूंढ रहे हैं। वह 4 अक्षर और एक खुला अंत है। कौन से अक्षर महत्वपूर्ण नहीं हैं, आपके DB को 26*26*26*26=456976 विशिष्ट मूल्यों से निपटना होगा। इसे उपरोक्त सूत्र और अपने 40 मिलियन रिकॉर्ड में रखें। आपको एक x
मिलता है 0,0114244 में से।
मुझे नहीं पता कि फिर से दहलीज क्या है, लेकिन IIRC यह 0,1 या कुछ और है। तो, अगर आप x
. हैं 0,1 से ऊपर है सूचकांक का उपयोग किया जाता है, यदि यह कम है, तो यह नहीं है।
ऐसा क्यों है? इंडेक्स का उपयोग करना चीजों को धीमा भी कर सकता है, क्योंकि आपके डीबी को इंडेक्स को देखना है, उस इंडेक्स में देखें कि आपकी भौतिक हार्ड ड्राइव पर कौन सी स्थिति उपयुक्त रिकॉर्ड है और फिर वह रिकॉर्ड प्राप्त करें। इसलिए, जब x 10% से कम होता है, तो केवल संपूर्ण तालिका स्कैन करना अधिक तेज़ होता है।
संक्षेप में:आपके जैसे केवल एक कमजोर सूचकांक के साथ 40 मिलियन रिकॉर्ड को फ़िल्टर करना बेकार है।