Mengenai regexp
Regexp bisa tidak pernah gunakan indeks di MySQL.=
akan menggunakan indeks jika:
- indeks dideklarasikan pada kolom;
- nilai dalam kolom memiliki kardinalitas yang cukup (jika lebih dari +/- 20% baris cocok, MySQL tidak akan menggunakan indeks, karena dalam hal ini pemindaian tabel penuh lebih cepat );
- Tidak ada indeks lain pada tabel yang sama yang lebih cocok (MySQL hanya dapat menggunakan satu indeks per tabel per subpilihan);
Mempertimbangkan ini dan beberapa peringatan esoteris lainnya, sebuah =
perbandingannya banyak lebih cepat dari regexp.
Mengenai suka
LIKE dapat menggunakan indeks jika wildcard bukan karakter pertama.
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
Performa like
saat menggunakan indeks sangat dekat dengan =
(dengan asumsi jumlah baris yang sama dikembalikan).