SQL में तार की तुलना करने के लिए '=' या LIKE का उपयोग करें?


169

यदि आप SQL कथनों में तार की तुलना करने के लिए LIKE या '=' का उपयोग करें, तो लगभग (लगभग धार्मिक) चर्चा होती है।

  • क्या LIKE का उपयोग करने के कारण हैं?
  • क्या '=' का उपयोग करने के कारण हैं?
  • प्रदर्शन? पठनीयता?

जवाबों:


126

प्रदर्शन अंतर देखने के लिए, इसे आज़माएँ:

SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name = B.name

SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name LIKE B.name

'=' के साथ तार की तुलना बहुत तेज है।


5
वाह ... ठीक है, मैंने बात ले ली। ~ 600 प्रविष्टियों के साथ तालिका, फ़ील्ड की तुलना के रूप में 10 अंकों की संख्या: बराबर 20 से 30 गुना तेज है!
ग्वारदा

194

LIKEऔर समानता ऑपरेटर के अलग-अलग उद्देश्य हैं, वे एक ही काम नहीं करते हैं:
=बहुत तेज़ है, जबकि LIKEवाइल्डकार्ड की व्याख्या कर सकते हैं। =आप जहाँ भी और LIKEजहाँ भी आप कर सकते हैं का उपयोग करें ।

SELECT * FROM user WHERE login LIKE 'Test%';

नमूना मिलान:

TestUser1
TestUser2
TestU
Test



14

स्ट्रिंग मिलान के लिए पोस्टग्रेज ऑफर करने वाले कुछ अन्य ट्रिक्स हैं (यदि ऐसा होता है तो आपका DB होना):

ILIKE, जो एक असंवेदनशील LIKE मैच है:

select * from people where name ilike 'JOHN'

मेल खाता है:

  • जॉन
  • जॉन
  • जॉन

और यदि आप वास्तव में पागल होना चाहते हैं तो आप नियमित अभिव्यक्ति का उपयोग कर सकते हैं:

select * from people where name ~ 'John.*'

मेल खाता है:

  • जॉन
  • Johnathon
  • छोकरा

1
जहाँ तक मुझे नियमित अभिव्यक्ति के बारे में पता है और जैसे कीवर्ड्स का प्रदर्शन '=' से भी बदतर है
14

टाइपो 'इलाइक' से 'लाइक'
सालाह अल्शाल

9

बस एक सिर के रूप में, '=' ऑपरेटर ट्रांज़ेक्ट-एसक्यूएल में रिक्त स्थान के साथ तार लगाएगा। तो 'abc' = 'abc 'सच्चा लौटेगा; 'abc' LIKE 'abc 'झूठा लौटेगा। ज्यादातर मामलों में '=' ​​सही होगा, लेकिन मेरे हालिया मामले में ऐसा नहीं था।

इसलिए जब '=' तेजी से होता है, तो LIKE आपके इरादे को और स्पष्ट कर सकता है।

http://support.microsoft.com/kb/316626


7

पैटर्न मिलान के लिए LIKE का उपयोग करें। सटीक मैच के लिए =।


6

LIKEपैटर्न मिलान के लिए उपयोग किया जाता है और =समानता परीक्षण ( COLLATIONउपयोग में परिभाषित ) के लिए उपयोग किया जाता है ।

=अनुक्रमणिका का उपयोग कर सकते हैं, जबकि LIKEक्वेरीज़ में आमतौर पर इसे फ़िल्टर करने के लिए सेट किए गए परिणाम में हर एक रिकॉर्ड का परीक्षण करने की आवश्यकता होती है (जब तक कि आप पूर्ण पाठ खोज का उपयोग नहीं कर रहे हैं) इसलिए =बेहतर प्रदर्शन।


4

LIKE
'% प्रत्यय' पर Wildcards char [*?] की तरह मेल खाता है - मुझे प्रत्यय के साथ समाप्त होने वाली हर चीज़ दें। आप ऐसा नहीं कर सकते हैं =
वास्तव में मामले पर निर्भर करता है।


3

प्रदर्शन के धीमे होने पर भी "जैसे" का उपयोग करने का एक और कारण है: वर्ण मानों को अंतर्निहित रूप से पूर्णांक में परिवर्तित किया जाता है, जब:

घोषित @transid varchar (15)

अगर @transid! = 0

आपको "varchar value का रूपांतरण '123456789012345' एक इंट कॉलम में ओवरफ्लो" त्रुटि देगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.