सबसे आम तरीका खोज स्ट्रिंग और डेटा को कम या अधिक करना है। लेकिन इसके साथ दो समस्याएं हैं।
- यह अंग्रेजी में काम करता है, लेकिन सभी भाषाओं में नहीं। (शायद अधिकांश भाषाओं में भी नहीं।) प्रत्येक लोअरकेस अक्षर में एक समान अपरकेस अक्षर नहीं है; प्रत्येक अपरकेस अक्षर में एक समान लोअरकेस अक्षर नहीं होता है।
- निचले () और ऊपरी () जैसे कार्यों का उपयोग करना आपको एक अनुक्रमिक स्कैन देगा। यह अनुक्रमित का उपयोग नहीं कर सकता। मेरी परीक्षण प्रणाली में, एक इंडेक्स का उपयोग करने वाली क्वेरी की तुलना में कम () का उपयोग करने में लगभग 2000 गुना अधिक समय लगता है। (परीक्षण डेटा में 100k से अधिक पंक्तियाँ हैं।)
कम से कम तीन कम अक्सर उपयोग किए जाने वाले समाधान हैं जो अधिक प्रभावी हो सकते हैं।
- साइटेक्स मॉड्यूल का उपयोग करें , जो ज्यादातर केस-असंवेदनशील डेटा प्रकार के व्यवहार की नकल करता है। उस मॉड्यूल को लोड करने के बाद, आप एक केस-इन्सेंसिटिव इंडेक्स बना सकते हैं
CREATE INDEX ON groups (name::citext);
। (लेकिन नीचे देखें।)
- केस-असंवेदनशील टकराव का उपयोग करें। यह तब सेट किया जाता है जब आप डेटाबेस को इनिशियलाइज़ करते हैं। केस-असंवेदनशील टकराव का उपयोग करने का मतलब है कि आप ग्राहक कोड से किसी भी प्रारूप के बारे में स्वीकार कर सकते हैं, और आप अभी भी उपयोगी परिणाम वापस करेंगे। (इसका मतलब यह भी है कि आप केस-संवेदी प्रश्न नहीं कर सकते हैं।
- एक कार्यात्मक सूचकांक बनाएं। उपयोग करके एक लोअरकेस इंडेक्स बनाएं
CREATE
INDEX ON groups (LOWER(name));
। ऐसा करने के बाद, आप जैसे प्रश्नों के साथ सूचकांक का लाभ उठा सकते हैं SELECT id FROM groups WHERE LOWER(name) = LOWER('ADMINISTRATOR');
, या SELECT id FROM groups WHERE LOWER(name) = 'administrator';
आपको LOWER () का उपयोग करना याद रखना होगा, हालाँकि।
साइटेक्स मॉड्यूल एक वास्तविक केस-असंवेदनशील डेटा प्रकार प्रदान नहीं करता है। इसके बजाय, यह व्यवहार करता है जैसे कि प्रत्येक स्ट्रिंग को नीचा दिखाया गया था। यही है, यह व्यवहार करता है जैसे कि आपने lower()
प्रत्येक स्ट्रिंग पर बुलाया था , जैसा कि ऊपर की संख्या 3 में है। इसका फायदा यह है कि प्रोग्रामर को स्ट्रैंथ को कम करने के लिए याद नहीं रखना पड़ता है। लेकिन आपको साइटेक्स का उपयोग करने का निर्णय लेने से पहले डॉक्स में "स्ट्रिंग तुलनात्मक व्यवहार" और "सीमाएं" अनुभागों को पढ़ना होगा।