Ohledně regulárního výrazu
Regulární výraz nemůže nikdy použijte index v MySQL.
The =
použije index, pokud:
- ve sloupci je deklarován index;
- hodnoty ve sloupci mají dostatečnou mohutnost (pokud se shoduje více než +/- 20 % řádků, MySQL nepoužije index, protože v takovém případě je provedení úplného prohledání tabulky rychlejší );
- Žádné jiné indexy ve stejné tabulce nejsou vhodnější (MySQL může používat pouze jeden index na tabulku a podvýběr);
Vzhledem k těmto a některým dalším esoteričtějším výhradám =
srovnání je hodně rychlejší než regulární výraz.
Pokud jde o jako
LIKE může použít index, pokud zástupný znak není první znak.
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
Výkon like
při použití indexu je velmi blízko =
(za předpokladu stejného počtu vrácených řádků).