9

कैसे बनाएं, सबसे पहले, मुझे इंगित करना चाहिए कि मुझे SQL सर्वर अनुक्रमणिका पर अधिक ज्ञान नहीं है।वर्चर (अधिकतम) क्वेरी प्रदर्शन में सुधार करना, और सूचकांक

मेरी स्थिति यह है कि मेरे पास एक SQL Server 2008 डेटाबेस तालिका है जिसमें एक वर्चर (अधिकतम) कॉलम आमतौर पर बहुत टेक्स्ट से भरा हुआ है।

मेरे ASP.NET वेब आवेदन एक खोज सुविधा है जो कीवर्ड खोजों के लिए इस स्तंभ प्रश्नों है, और कीवर्ड की खोज की संख्या के आधार के लिए उनके हो सकता है एक या कई की तरह '% कीवर्ड%' SQL क्वेरी में बयान खोज करने के लिए।

मेरा वेब एप्लिकेशन भी इस तालिका में कई अन्य स्तंभों द्वारा खोज की अनुमति देता है, न केवल एक कॉलम। अन्य टेबलों से भी कुछ जुड़ते हैं।

मेरा सवाल है, क्या यह खोज क्वेरी के प्रदर्शन में सुधार के लिए इस कॉलम पर एक सूचकांक बनाने योग्य है? और यदि हां, तो किस प्रकार की अनुक्रमणिका, और सिर्फ एक कॉलम को अनुक्रमणित करना पर्याप्त होगा या क्या मुझे प्राथमिक कुंजी और अन्य खोज योग्य कॉलम जैसे अन्य कॉलम शामिल करने की आवश्यकता है?

उत्तर

7

यदि आप जैसे '% कीवर्ड%' खोज कर रहे हैं तो नियमित रूप से एक नियमित अनुक्रमणिका बनाना उचित नहीं है। इसका कारण यह है कि अनुक्रमण एक शब्दकोश खोजना पसंद करता है, जहां आप बीच में शुरू करते हैं, तब तक अंतर को विभाजित करते हैं जब तक आप शब्द नहीं पाते। वह वाइल्डकार्ड क्वेरी आपको ऐसे शब्द को देखने के लिए कह रही है जिसमें टेक्स्ट "टू" या कुछ है - मिलान खोजने का एकमात्र तरीका संपूर्ण शब्दकोश स्कैन करना है।

हालांकि, आप इस तरह के परिदृश्य (see here) के लिए एक पूर्ण-पाठ खोज पर विचार कर सकते हैं।

0

पता लगाने का सबसे अच्छा तरीका यह है कि वास्तविक जीवन में क्या होगा और इंडेक्स के बिना और उसके डीबी के खिलाफ उन्हें चलाने की कोशिश करें। हालांकि, सामान्य रूप से, यदि आप कई चयन प्रश्न कर रहे हैं, और छोटे अद्यतन/हटाए गए प्रश्न, एक सूचकांक आपके प्रश्नों को तेज़ी से बना सकता है।

हालांकि, यदि आप बहुत सारे अपडेट करते हैं, तो इंडेक्स आपके प्रदर्शन को नुकसान पहुंचा सकता है, इसलिए आपको यह जानना होगा कि यह निर्णय लेने से पहले आपके डीबी को किस प्रकार के प्रश्नों का सामना करना पड़ेगा।

15

आप वर्चर (अधिकतम) फ़ील्ड पर एक अनुक्रमणिका नहीं बना सकते हैं। सूचकांक पर अधिकतम बाइट्स 900 है। यदि कॉलम 900 बाइट्स से बड़ा है, तो आप इंडेक्स बना सकते हैं लेकिन 900 बाइट्स के साथ कोई भी डालने में असफल हो जायेगा।

मैं आपको fulltext खोज पढ़ने के लिए सुझाव देता हूं। यह इस मामले

+0

डिएगो, मेरी समझ है कि मैं एक वर्चर (अधिकतम) कॉलम पर अनुक्रमित कर सकता हूं एक गैर-क्लस्टर, ऑफ़लाइन इंडेक्स है और यह कि var (max) कॉलम शामिल है, उदाहरण के लिए। तालिका नाम (कुछ कॉलम) पर नॉनक्लस्टेड इंडेक्स इंडेक्सनाम बनाएं (VarcharMaxColumn) (ऑनलाइन = OFF) – johna

+1

वर्कर (अधिकतम) केवल हो सकता है एक सूचकांक पर चिपकाया गया, इसका मतलब है कि केवल पत्ती के स्तर इंडेक्स पर भाग लेंगे, जिसका अर्थ यह है कि इसका उपयोग शायद खोज क्वेरी – Diego

+1

पर किया जाएगा (ONLINE = OFF) इंडेक्स की संपत्ति नहीं है। यह इंगित करता है कि निर्माण के दौरान सूचकांक ऑफ़लाइन सेट किया जाएगा। यदि आप इसे चालू करते हैं, तो सूचकांक tempDB पर बनाया जाएगा और तालिका इंडेक्स निर्माण प्रक्रिया के दौरान पहुंच योग्य होगी। इसका उपयोग विशाल टेबल के लिए किया जाना चाहिए जहां एक इंडेक्स बनाने में काफी समय लगता है और बिल्डिंग – Diego

20

सबसे अच्छा सादृश्य मैं कभी क्यों एक सूचकांक '%wildcard%' खोज में मदद नहीं करेगा के लिए देखा है में सूट आप चाहिए:

दो लोगों को ले लो। प्रत्येक एक ही फोन बुक हाथ रखो। अपने बाएं व्यक्ति को कहें:

मुझे बताएं कि इस फोन बुक में अंतिम नाम "स्मिथ" के साथ कितने लोग हैं।

अब आप अपने अधिकार पर व्यक्ति को कहते हैं:

मुझे बताओ कि कितने लोगों को पहला नाम "साइमन के साथ इस फोन बुक में हैं।"

एक सूचकांक एक फोन की किताब की तरह बात। बहुत मुश्किल शुरुआत में है कि बात यह है कि बीच में या अंत में है कि के लिए स्कैन करने के लिए तलाश करने के लिए। बहुत आसान है।

हर समय मैंने इसे एक सत्र में दोहराया है, मुझे लगता है कि हल्के बल्ब चलते हैं, इसलिए मैंने सोचा कि यह साझा करने के लिए उपयोगी हो सकता है।

+0

के दौरान तालिका अप्राप्य नहीं हो सकती है। यह वही समानता है जिसका मैं हमेशा उपयोग करता हूं। –

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