Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर पूर्ण पाठ कैटलॉग और स्वतः पूर्ण

मेरी प्रारंभिक टिप्पणी, मुझे लगता है कि कंप्यूटर का पूरा नाम FirstName + '' + LastName जैसा कुछ है - क्या आप क्वेरी का पहला नाम 'Carl%' और अंतिम नाम जैसे 'Gari%' बना सकते हैं जानकारी इकट्ठा करने का इरादा था। इसका उत्तर देने के लिए धन्यवाद।

मैंने इसे स्वयं नहीं किया है (और यह केवल आपके पर्यावरण के लिए मायने रखता है), लेकिन आप इस तरह के खंडों को शामिल आधारित क्वेरी में जोड़ सकते हैं और क्वेरी योजनाओं की तुलना संस्करण में कर सकते हैं।

3 संभावित प्रश्न हैं जो स्पष्ट प्रश्न हैं

A Contains version -- your existing query
A Like Version -- as I commented
A Combined version -- using like and contains

मुझे नहीं लगता कि आप पूर्ण-अनुक्रमणिका खोज का उपयोग करने के बारे में हमेशा LIKE संस्करण की तुलना में तेज़ होने के बारे में सही हैं, क्योंकि मुझे लगता है कि सही उत्तर है, यह निर्भर करता है।

यदि आपके पास अंतिम नाम (या प्रथम नाम भी) पर अनुक्रमणिका है, तो "पसंद" संस्करण को अनुक्रमित लुकअप करना चाहिए। यह आपके चाबियों के वितरण और कितने प्रतिशत मेल पर निर्भर करेगा। यानी, 'G%' जैसे अंतिम नाम की खोज करें और 'Gari%' और 'Carl%' की तुलना में 'Carl%' जैसे प्रथम नाम की खोज बहुत धीमी होगी यदि केवल अंतिम नाम पर अनुक्रमणिका हो। इसलिए, यदि आपके पास पर्याप्त रूप से लंबी खोज कुंजियाँ हैं, तो LIKE संस्करण सम्‍मिलित संस्करण की तुलना में तेज़ होने की संभावना है। आपको यह जानने के लिए परीक्षण करना होगा कि निश्चित रूप से सबसे अच्छा क्या काम करता है।

यह हो सकता है कि संयुक्त संस्करण हमेशा सबसे अच्छा विकल्प हो या कम से कम पर्याप्त हो। लेकिन नीचे दी गई रणनीति का पालन करने से पहले मैं निश्चित रूप से इसे पहले कोशिश करूंगा।

मैं जो समग्र रणनीति सुझाऊंगा वह है:

वृद्धिशील खोज का उपयोग तब तक बंद करें जब तक कि उपयोगकर्ता ने कम से कम कुछ वर्ण टाइप न कर लिए हों -- ऐसा करने के लिए आप बहुत अधिक प्रदर्शन हिट का भुगतान कर रहे हैं, क्योंकि इसका आपकी वेबसाइट के उपयोगकर्ताओं के लिए लगभग कोई वास्तविक मूल्य नहीं है। एक सुझाव के रूप में, कम से कम 3 वर्ण दर्ज करने से पहले वृद्धिशील खोज न करें। चूंकि आपने उल्लेख नहीं किया है कि आपको वृद्धिशील खोज से पहले ही न्यूनतम वर्णों की आवश्यकता है।

यदि यह वीटो किया गया है, तो वही मूल रणनीति है, लेकिन आप वृद्धिशील खोज का आह्वान नहीं करते हैं जब तक कि एनएन मिलीसेकंड समाप्त नहीं हो जाता है क्योंकि अंतिम वर्ण टाइप किया गया है या संख्या वर्ण टाइप किया गया है> कुछ लंबाई। वास्तव में, चूंकि कुछ अंतिम नाम केवल 2 वर्ण हैं, इसलिए आपको वास्तव में इस रणनीति का उपयोग करना होगा।

इसी तरह, मैं कोई भी वृद्धिशील खोज बिल्कुल भी नहीं करूंगा, चाहे लंबाई कुछ भी हो, जब तक कि उपयोगकर्ता व्यर्थ खोजों से बचने के लिए नए वर्णों में तेजी से प्रवेश कर रहा है, जिसका उपयोग उपयोगकर्ता नहीं कर रहा है।

जब तक संयुक्त क्वेरी हमेशा पर्याप्त न हो, खोज परिणामों को वापस सौंपने के लिए अपने सर्वर पर दो अलग-अलग संग्रहित प्रोसेस रखें, एक संस्करण जैसा संस्करण है, दूसरा संस्करण शामिल है। कितना नाम प्रदान किया गया था, इस पर निर्भर करते हुए सबसे अच्छे परिणाम प्राप्त करने के लिए अपेक्षित संस्करण को कॉल करें।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल, शामिल होने के बारे में प्रश्न

  2. CHECKSUM और CHECKSUM_AGG:एल्गोरिथम क्या है?

  3. एक्सएमएल डेटा कॉलम के माध्यम से टी-एसक्यूएल लूपिंग पथों के अनूठे सेट को प्राप्त करने के लिए

  4. समान आईडी वाली पंक्तियों वाली तालिका से कॉलम का उपयोग करके स्ट्रिंग मान बनाने का सबसे अच्छा तरीका कौन सा है?

  5. SQL सर्वर के साथ डालने/अपडेट करने से पहले मैं डेटा को कैसे सत्यापित कर सकता हूं?