2009-05-06 16 views
6

मेरे पास कई कॉलम के साथ डेटाबेस तालिका है; उनमें से अधिकतर VARCHAR(x) टाइप कॉलम हैं, और इनमें से कुछ कॉलम पर एक इंडेक्स है ताकि मैं इसके अंदर डेटा के लिए जल्दी से खोज कर सकूं।एसक्यूएल सर्वर; टेक्स्ट कॉलम पर सूचकांक

हालांकि, कॉलम में से एक TEXT कॉलम है, क्योंकि इसमें बहुत बड़ी मात्रा में डेटा (सादा एसीसीआई टेक्स्ट के 23 केबी) शामिल हैं। मैं उस कॉलम में खोज करने में सक्षम होना चाहता हूं (... WHERE col1 LIKE '%search string%'...), लेकिन वर्तमान में यह क्वेरी करने के लिए हमेशा के लिए ले रहा है। मुझे पता है कि इस कॉलम खोज के कारण क्वेरी धीमी है क्योंकि जब मैं WHERE खंड से उस मानदंड को हटाता हूं तो क्वेरी पूर्ण हो जाती है (जिसे मैं मानता हूं) तत्काल।

मैं इस कॉलम पर एक इंडेक्स नहीं जोड़ सकता क्योंकि SQL सर्वर प्रबंधन स्टूडियो में इंडेक्स बिल्डर/विज़ार्ड में उस कॉलम के लिए वह विकल्प ग्रे हो गया है।

उस कॉलम में क्वेरी खोज को तेज़ करने के लिए यहां मेरे विकल्प क्या हैं?

आपके समय के लिए धन्यवाद ...

अद्यतन
ठीक है, तो मैं पूर्ण पाठ खोज में देखा है और वह सब सामान किया था, और अब मैं प्रश्नों को चलाने के लिए चाहते हैं। हालांकि, "इसमें" उपयोग करते समय, यह केवल एक शब्द स्वीकार करता है; अगर मुझे एक सटीक वाक्यांश की आवश्यकता है तो क्या होगा? ... WHERE CONTAINS (col1, 'search phrase') ... एक त्रुटि फेंकता है।

क्षमा करें, मैं एसक्यूएल सर्वर के लिए नया हूँ

अद्यतन 2 खेद, बस इसे लगा बाहर; एकाधिक शब्दों के साथ एक खंड के बजाय एकाधिक "शामिल" खंडों का उपयोग करें। असल में, यह अभी भी मुझे जो चाहिए (सटीक वाक्यांश) नहीं मिलता है, यह केवल यह सुनिश्चित करता है कि वाक्यांश में सभी शब्द मौजूद हैं।

उत्तर

9

टेक्स्ट फ़ील्ड खोजना हमेशा धीमा रहता है। Full Text Search दें और देखें कि क्या यह आपके लिए बेहतर काम करता है।

+0

+1: पूर्ण-पाठ जाने का तरीका है - निश्चित रूप से! –

+0

लिंक अब और काम नहीं कर रहा है। यदि संभव हो तो कृपया ठीक करें! – Andreas

+0

लिंक अब –

4

आपको कॉलम पर पूर्ण टेक्स्ट इंडेक्सिंग का उपयोग करना चाहिए।

4

आपके प्रश्नों की तरह LIKE '%string%' हैं (i। ई। आप एक स्ट्रिंग के लिए खोज एक TEXT क्षेत्र के अंदर), तो आप एक FULLTEXT सूचकांक की आवश्यकता होगी।

आप में सबस्ट्रिंग क्षेत्र (LIKE 'string%') की और प्रयोग SQL Server 2005 या उच्चतर शुरुआत की खोज करते हैं, तो आप अपने TEXT एक VARCHAR(MAX) में, एक गणना स्तंभ और सूचकांक इस स्तंभ बनाने बदल सकते हैं।

प्रदर्शन जानकारी के लिए अपने ब्लॉग में इस लेख देखें:

0

आप FTS में जटिल बूलियन क्वेरी कर सकते हैं; जैसे

शामिल (yourcol, ' "मेरी पहली डंक" या "मेरी दूसरी स्ट्रिंग" और "मेरे तीसरे स्ट्रिंग"')

आपकी क्वेरी ContainsTable या freetexttable बेहतर परिणाम दे सकता है पर निर्भर करता है।

आप नेट आप A google full text search

+0

तय किया गया है मैंने अभी आपकी विविधता की कोशिश की है, और यह काम नहीं करता है; सबसे पहले, इसे 'और नहीं' के उपयोग की आवश्यकता होती है, और दूसरा या एकाधिक शब्द जोड़ना काम नहीं करता है अगर मैं क्वेरी – user85116

+0

में 'या "क्वेरी का उपयोग करता हूं तो मेरी गलती आपको सिंटैक्स में होती है (* या colname, '' आपका डेटा "और" कुछ अन्य डेटा "') http://msdn.microsoft.com/en-us/library/ms187787.aspx – u07ch

0

पर और चूंकि कोई भी पहले से ही यह कहा है कि देखने के लिए चाहते हो सकता है (हो सकता है, क्योंकि यह स्पष्ट है) के माध्यम से जोड़ने कर रहे हैं अपने मौजूदा अनुक्रमणिका क्वेरी करने LIKE '%string%' नजरअंदाज - तो यह धीमी गति से चलाने के लिए होगा। इसलिए - आपको पूर्ण टेक्स्ट अनुक्रमण का उपयोग करने की आवश्यकता क्यों है। (जो क्वास्नोई ने कहा था)।

सुधार - मुझे यकीन है कि मैंने यह सीखा है, और हमेशा यह माना जाता है - लेकिन कुछ जांच करने के बाद (शुरुआत में वाइल्डकार्ड का उपयोग करके) ठीक लगता है? मेरे पुराने regex प्रश्न पसंद के साथ बेहतर चलाते हैं!

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