2009-09-07 11 views
20

क्या यह वक्रार कॉलम को केवल इंडेक्स में इस्तेमाल करने के लिए एक अच्छा विचार है? मैं क्या क्वेरी एनालिटिक्स से पढ़ सकते हैं से मैं निम्न क्वेरी से मिलती है:एसक्यूएल सर्वर: इंडेक्स कॉलम कैसा इस्तेमाल किया जाता है?

SELECT * FROM ClientUsers WHERE Email LIKE '%[email protected]%' 

मैं किसी भी सूचकांक और 0.14 एक सूचकांक के साथ के बिना 0.38 की एक "अनुमानित सबट्री लागत" मिलता है। क्या यह एक एनालिजिंग के लिए उपयोग करने के लिए एक अच्छा मीट्रिक है यदि एक क्वेरी को इंडेक्स के साथ अनुकूलित किया गया है?

उत्तर

48

डेटा 'abcdefg' को देखते हुए

WHERE Column1 LIKE '%cde%' --can't use an index 

WHERE Column1 LIKE 'abc%' --can use an index 

WHERE Column1 Like '%defg' --can't use an index, but see note below 

नोट: यदि आप महत्वपूर्ण प्रश्नों कि '% defg' की आवश्यकता होती है है, तो आप एक लगातार गणना स्तंभ जहां आप विपरीत() स्तंभ और फिर इसे सूचकांक इस्तेमाल कर सकते हैं। फिर आप इस पर पूछ सकते हैं:

WHERE Column1Reverse Like REVERSE('defg')+'%' --can use the persistent computed column's index 
+3

मुझे आपका समाधान पसंद है, हालांकि मैं' डी इसे एक बदसूरत हैक कहते हैं;) – idstam

+7

मैंने इस प्रणाली पर इस बदसूरत हैक का उपयोग किया है जहां मूल डिजाइनर ने प्रमुख शून्य और अन्य कुंजी अक्षर + अग्रणी शून्य के साथ संख्या char (x) बनाया है। उपयोगकर्ताओं को बताएं कि उन्हें अग्रणी शून्य और अक्षर + अग्रणी शून्य में प्रवेश करना है! हा। वे 203 में प्रवेश करना चाहते हैं, जी 000000203 नहीं, इसलिए यह रिवर्स() "हैक" वहां मदद करेगा। –

+0

@ केएम। इस उत्तर का संदर्भ यहां दिया गया है: http://dba.stackexchange.com/questions/91340/1-hour-query-is-there-another-way-to-do-this/91346#91346 – DForck42

8

मेरे अनुभव में पहला% -इनइन किसी भी सूचकांक को बेकार कर देगा, लेकिन अंत में एक सूचकांक का उपयोग करेगा।

+0

पर्याप्त बंद करें - जैसे इंडेक्स पर उपसर्ग का उपयोग करेंगे, लेकिन आप इंडेक्स के माध्यम से वाइल्डकार्ड को हल नहीं कर सकते हैं, जहां तक ​​यह जाएगा। – ConcernedOfTunbridgeWells

+0

तो इन कॉलम पर इंडेक्स के लिए याय या नहीं? –

+1

यदि आप हमेशा अग्रणी% के साथ कॉलम से पूछताछ करते हैं, तो अनुक्रमणिका का कभी भी उपयोग नहीं किया जाएगा। इस प्रकार उत्तर इस बात पर निर्भर करता है कि आप अपने डेटा से कैसे पूछते हैं। –

2

अपने प्रश्न के मीट्रिक भाग का जवाब देने के लिए: इंडेक्स/टेबल स्कैन/खोज करने का प्रकार यह जानने के लिए एक अच्छा संकेतक है कि कोई इंडेक्स (ठीक से) उपयोग किया जा रहा है या नहीं। यह आमतौर पर क्वेरी प्लान विश्लेषक में सबसे ऊपर दिखाया जाता है। निम्नलिखित स्कैन/लेनी प्रकार सबसे खराब (ऊपर) से सबसे अच्छा (नीचे) के लिए हल कर रहे हैं:

  • तालिका स्कैन
  • क्लस्टर सूचकांक स्कैन
  • सूचकांक स्कैन
  • क्लस्टर सूचकांक की शोध
  • सूचकांक की शोध

अंगूठे के नियम के रूप में, आप आमतौर पर जब भी संभव हो स्कैन पर जाने की कोशिश करेंगे। हमेशा के रूप में, टेबल आकार, पूछे गए कॉलम इत्यादि के आधार पर अपवाद हैं। मैं "स्कैन तलाश सूचकांक" के लिए search on StackOverflow करने की सलाह देता हूं, और आपको इस विषय के बारे में बहुत अच्छी जानकारी मिल जाएगी।

संबंधित मुद्दे