Dotyczy wyrażenia regularnego
Wyrażenie regularne może nigdy użyj indeksu w MySQL.=
użyje indeksu, jeśli:
- indeks jest zadeklarowany w kolumnie;
- wartości w kolumnie mają wystarczającą liczność (jeśli więcej niż +/- 20% wierszy jest zgodnych, MySQL nie użyje indeksu, ponieważ w takim przypadku wykonanie pełnego skanowania tabeli jest szybsze );
- Żadne inne indeksy w tej samej tabeli nie są lepiej dopasowane (MySQL może używać tylko jednego indeksu na tabelę na podselekcję);
Biorąc pod uwagę te i inne bardziej ezoteryczne zastrzeżenia, =
porównanie to dużo szybciej niż wyrażenie regularne.
Dotyczy polubienia
LIKE może użyć indeksu, jeśli symbol wieloznaczny nie jest pierwszym znakiem.
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
Wydajność like
gdy użycie indeksu jest bardzo zbliżone do =
(zakładając, że zwrócono taką samą liczbę wierszy).