निम्नलिखित में से कौन सा प्रश्न अधिक तेज़ है (LIKE vs CONTAINS)?
SELECT * FROM table WHERE Column LIKE '%test%';
या
SELECT * FROM table WHERE Contains(Column, "test");
निम्नलिखित में से कौन सा प्रश्न अधिक तेज़ है (LIKE vs CONTAINS)?
SELECT * FROM table WHERE Column LIKE '%test%';
या
SELECT * FROM table WHERE Contains(Column, "test");
जवाबों:
दूसरा (आप का मतलब है CONTAINS
, और वास्तव में एक वैध प्रश्न में डाल दिया) तेज होना चाहिए, क्योंकि यह सूचकांक के कुछ रूप का उपयोग कर सकता है (इस मामले में, एक पूर्ण पाठ सूचकांक)। बेशक, यह फ़ॉर्म केवल तभी उपलब्ध होता है जब स्तंभ एक पूर्ण पाठ अनुक्रमणिका में होता है। यदि ऐसा नहीं है, तो केवल पहला फॉर्म उपलब्ध है।
पहली क्वेरी, LIKE का उपयोग करते हुए, एक इंडेक्स का उपयोग करने में असमर्थ होगी, क्योंकि यह वाइल्डकार्ड से शुरू होता है, इसलिए हमेशा एक पूर्ण तालिका स्कैन की आवश्यकता होगी।
CONTAINS
क्वेरी किया जाना चाहिए:
SELECT * FROM table WHERE CONTAINS(Column, 'test');
CONTAINS
? इसका क्या? प्रश्न का मूल रूप ऐसा था Column CONTAIN("%test%",Column)>0
जो मान्य के करीब नहीं था। यह अभी भी पूरी तरह से सही नहीं है।
SQL Server 2012 आवृत्ति पर दोनों क्वेरीज़ चलाने के बाद, मैं पुष्टि कर सकता हूं कि मेरे मामले में पहली क्वेरी सबसे तेज़ थी।
LIKE
कीवर्ड के साथ क्वेरी में क्लस्टर इंडेक्स स्कैन दिखाया गया है।
CONTAINS
भी पूरा टेक्स्ट मैच के लिए अतिरिक्त ऑपरेटरों के साथ संकुल अनुक्रमणिका स्कैन था और किसी मर्ज में शामिल हो।
LIKE
प्रमुख वाइल्डकार्ड वाली क्वेरी इंडेक्स भाग को कुशलता से उपयोग करने में सक्षम नहीं होगी। इसके लिए बस पूरी चीज को स्कैन करना होगा। निस्संदेह ऐसी कुछ परिस्थितियां हो सकती हैं जिसमें पूर्ण CI स्कैन एक पूर्ण पाठ सूचकांक का उपयोग करते हुए क्वेरी से बेहतर प्रदर्शन करता है (शायद उदाहरण के लिए पंक्तियों का एक बहुत उच्च अनुपात मेल खाता है) यह काफी हद तक अपवाद होगा कुछ सामान्य नियम जो आप पुष्टि कर सकते हैं " "।
LIKE
।
मुझे लगता है कि आपकी क्वेरी में एक डैश ("-") होने में CONTAINS
अधिक समय और उपयोग हुआ ।Merge
adventure-works.com
डैश एक ब्रेक शब्द है, इसलिए परिणामों की खोज करने और विलय करने की तुलना CONTAINS
में पूर्ण-पाठ सूचकांक की adventure
खोज की works.com
।
इसके अलावा इसे बदलने की कोशिश करें:
SELECT * FROM table WHERE Contains(Column, "test") > 0;
इसके लिए:
SELECT * FROM table WHERE Contains(Column, '"*test*"') > 0;
पूर्व में " यह एक परीक्षण है " और " एक परीक्षण-मामला योजना है " जैसे मूल्यों के साथ रिकॉर्ड मिलेगा ।
बाद वाले को " मैं यह परीक्षण कर रहा हूं " और " यह सबसे बड़ा है " जैसे मूल्यों के साथ रिकॉर्ड भी मिलेगा ।
CONTAINS
, यह केवल 'परीक्षण *' जैसे उपसर्ग शब्दों का उपयोग करने का उल्लेख करता है, न कि ' परीक्षण' जैसे प्रत्यय शब्द और '* परीक्षण ' की तरह पूर्ण प्रतिस्थापन खोज नहीं । मैंने इसे आजमाया नहीं है।