जॉनह ने क्वेरी लिखने के तरीके पर बहुत अच्छी तरह से कवर किया है। एक और महत्वपूर्ण मुद्दा है जिसका उल्लेख भी किया जाना चाहिए, हालांकि, जो इस तरह के एक प्रश्न के प्रदर्शन की विशेषता है। आइए इसे यहां दोहराएं (Oracle के लिए अनुकूलित):
SELECT EmployeeName FROM EmployeeTable WHERE LENGTH(EmployeeName) > 4;
यह क्वेरी स्तंभ मान पर लागू LENGTHफ़ंक्शन के परिणाम ( फ़ंक्शन को लागू करने के परिणाम) को प्रतिबंधित कर रही हैEmployeeName । ओरेकल में, और शायद अन्य सभी आरडीबीएमएस में, इसका मतलब है कि EmployeeName पर एक नियमित सूचकांक इस प्रश्न का उत्तर देने के लिए बेकार होगा; डेटाबेस एक पूर्ण टेबल स्कैन करेगा, जो वास्तव में महंगा हो सकता है।
हालांकि, विभिन्न डेटाबेस एक फ़ंक्शन इंडेक्स सुविधा प्रदान करते हैं जो इस तरह के प्रश्नों को गति देने के लिए डिज़ाइन किया गया है। उदाहरण के लिए, Oracle में, आप इस तरह एक सूचकांक बना सकते हैं:
CREATE INDEX EmployeeTable_EmployeeName_Length ON EmployeeTable(LENGTH(EmployeeName));
यह अभी भी आपके मामले में मदद नहीं कर सकता है, हालांकि, हो सकता है कि सूचकांक आपकी स्थिति के लिए बहुत चयनात्मक न हो। इसके द्वारा मेरा मतलब निम्नलिखित है: आप उन पंक्तियों के लिए पूछ रहे हैं जहाँ नाम की लंबाई 4 से अधिक है। मान लें कि उस तालिका में 80% कर्मचारी नाम 4. से अधिक हैं। तब डेटाबेस के समापन की संभावना है ( सही ढंग से) यह सूचकांक का उपयोग करने के लायक नहीं है, क्योंकि यह संभवतः तालिका के अधिकांश ब्लॉकों को वैसे भी पढ़ना है।
हालाँकि, यदि आपने कहने के लिए क्वेरी को बदल दिया है LENGTH(EmployeeName) <= 4, या LENGTH(EmployeeName) > 35, यह मानते हुए कि बहुत कम कर्मचारियों के नाम 5 से कम वर्ण या 35 से अधिक हैं, तो सूचकांक उठाया जाएगा और प्रदर्शन में सुधार होगा।
वैसे भी, संक्षेप में: प्रश्नों की प्रदर्शन विशेषताओं से सावधान रहें, जैसे आप लिखने की कोशिश कर रहे हैं।
ANDकथन जोड़ेंSELECT city FROM student.zipcode WHERE LENGTH(city) >= 4 AND LENGTH(city) <= 9;