regexp के संबंध में
regexp कभी नहीं . कर सकता है MySQL में अनुक्रमणिका का उपयोग करें।=
एक अनुक्रमणिका का उपयोग करेगा यदि:
- कॉलम पर एक इंडेक्स घोषित किया गया है;
- कॉलम के मानों में पर्याप्त कार्डिनैलिटी है (यदि +/- 20% से अधिक पंक्तियाँ मेल खाती हैं, तो MySQL एक इंडेक्स का उपयोग नहीं करेगा, क्योंकि उस स्थिति में एक पूर्ण टेबल स्कैन करना तेज़ है। );
- उसी तालिका पर कोई अन्य अनुक्रमणिका बेहतर अनुकूल नहीं है (MySQL प्रति उप-चयन प्रति तालिका केवल एक अनुक्रमणिका का उपयोग कर सकता है);
इन और कुछ अन्य गूढ़ चेतावनियों को ध्यान में रखते हुए एक =
तुलना बहुत है एक रेगेक्सपी से तेज।
इस तरह के संबंध में
यदि वाइल्डकार्ड पहला वर्ण नहीं है, तो LIKE एक अनुक्रमणिका का उपयोग कर सकता है।
SELECT * FROM t WHERE a LIKE 'abc' <<-- (case insensitive `=`) can use an index
SELECT * FROM t WHERE a LIKE 'abc%' <<-- can use an index
SELECT * FROM t WHERE a LIKE 'a%' <<-- can use an index, depending on cardinality
SELECT * FROM t WHERE a LIKE '%a%' <<-- cannot use an index
SELECT * FROM t WHERE a LIKE '_agf' <<-- cannot use an index
like
. का प्रदर्शन जब किसी इंडेक्स का उपयोग करना =
. के बहुत करीब हो (पंक्तियों की समान संख्या मानते हुए)।