In Bezug auf reguläre Ausdrücke
Der reguläre Ausdruck kann nie Verwenden Sie einen Index in MySQL.
Der =
verwendet einen Index, wenn:
- ein Index wird für die Spalte deklariert;
- die Werte in der Spalte haben eine ausreichende Kardinalität (wenn mehr als +/- 20 % der Zeilen übereinstimmen, verwendet MySQL keinen Index, da in diesem Fall ein vollständiger Tabellenscan schneller ist). );
- Keine anderen Indizes für dieselbe Tabelle sind besser geeignet (MySQL kann nur einen Index pro Tabelle und Unterauswahl verwenden);
In Anbetracht dieser und einiger anderer esoterischer Vorbehalte ein =
Vergleich ist viel schneller als ein regulärer Ausdruck.
Apropos wie
LIKE kann einen Index verwenden, wenn der Platzhalter nicht das erste Zeichen ist.
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
Die Leistung von like
bei Verwendung eines Index ist sehr nah an =
(unter der Annahme, dass dieselbe Anzahl von Zeilen zurückgegeben wird).