मुख्य नियम: अग्रणी वाइल्डकार्ड इंडेक्स को रोकते हैं
MySQL अग्रणी वाइल्डकार्ड (जैसे '%abc%' या '%abc') के साथ इंडेक्स का उपयोग नहीं कर सकता। लेकिन अनुगामी वाइल्डकार्ड (जैसे 'abc%') इंडेक्स का उपयोग कर सकते हैं।
सिंटैक्स: अनुगामी वाइल्डकार्ड (इंडेक्स-अनुकूल)
SELECT * FROM yourTableName WHERE yourColumnName LIKE 'anyLetter%';
व्यावहारिक उदाहरण
टेबल बनाना
mysql> CREATE TABLE TrailingWildCardDemo (
Id INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(20),
PRIMARY KEY(Id)
);
नाम डेटा डालना
mysql> INSERT INTO TrailingWildCardDemo(Name) VALUES('John');
mysql> INSERT INTO TrailingWildCardDemo(Name) VALUES('Johnson');
mysql> INSERT INTO TrailingWildCardDemo(Name) VALUES('Mike');
mysql> INSERT INTO TrailingWildCardDemo(Name) VALUES('Kevin');
mysql> INSERT INTO TrailingWildCardDemo(Name) VALUES('Adam');
mysql> INSERT INTO TrailingWildCardDemo(Name) VALUES('Ethan');
mysql> INSERT INTO TrailingWildCardDemo(Name) VALUES('James');
सभी रिकॉर्ड
+----+---------+ | Id | Name | +----+---------+ | 1 | John | | 2 | Johnson | | 3 | Mike | | 4 | Kevin | | 5 | Adam | | 6 | Ethan | | 7 | James | +----+---------+
क्वेरी: 'j' से शुरू होने वाले नाम (अनुगामी वाइल्डकार्ड)
mysql> SELECT * FROM TrailingWildCardDemo WHERE Name LIKE 'j%';
आउटपुट
+----+---------+ | Id | Name | +----+---------+ | 1 | John | | 2 | Johnson | | 7 | James | +----+---------+
प्रदर्शन तुलना
| पैटर्न | इंडेक्स उपयोग | प्रदर्शन | उपयोग मामला |
|---|---|---|---|
'abc%' | हाँ (रेंज स्कैन) | तेज़ | उपसर्ग खोज, ऑटोकंप्लीट |
'%abc' | नहीं (फुल स्कैन) | धीमा | प्रत्यय खोज |
'%abc%' | नहीं (फुल स्कैन) | सबसे धीमा | सबस्ट्रिंग खोज |
अग्रणी वाइल्डकार्ड के लिए समाधान
- फुलटेक्स्ट इंडेक्स:
FULLTEXTइंडेक्स औरMATCH() ... AGAINST()उपयोग करें। - नग्राम/पार्सर: MySQL 5.7+ में ngram फुलटेक्स्ट पार्सर।
- बाहरी खोज इंजन: Elasticsearch, Solr, आदि।
- आवेदन-स्तर कैशिंग: सामान्य खोजों को कैश करें।
- उल्टा कॉलम: उल्टे स्ट्रिंग को अलग कॉलम में संग्रहीत करें और
'cba%'खोजें।
EXPLAIN के साथ जांचें
EXPLAIN SELECT * FROM TrailingWildCardDemo WHERE Name LIKE 'j%';
type: range और key: Name_index देखें — इंडेक्स उपयोग हो रहा है।