Về regexp
Regexp có thể không bao giờ sử dụng một chỉ mục trong MySQL.
=
sẽ sử dụng một chỉ mục nếu:
- một chỉ mục được khai báo trên cột;
- các giá trị trong cột có đủ số lượng (nếu hơn +/- 20% số hàng khớp, MySQL sẽ không sử dụng chỉ mục, vì trong trường hợp đó, việc quét toàn bộ bảng sẽ nhanh hơn );
- Không có chỉ mục nào khác trên cùng một bảng phù hợp hơn (MySQL chỉ có thể sử dụng một chỉ mục cho mỗi bảng cho mỗi lựa chọn con);
Xem xét những điều này và một số bí truyền khác, hãy cảnh báo =
so sánh là nhiều nhanh hơn regexp.
Về lượt thích
LIKE có thể sử dụng một chỉ mục nếu ký tự đại diện không phải là ký tự đầu tiên.
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
Hiệu suất của like
khi sử dụng một chỉ mục rất gần với =
(giả sử số hàng được trả về bằng nhau).