Thứ tự lập chỉ mục quan trọng khi các điều kiện truy vấn của bạn chỉ áp dụng cho PHẦN của chỉ mục. Cân nhắc:
-
SELECT * FROM table WHERE first_name="john" AND last_name="doe"
-
SELECT * FROM table WHERE first_name="john"
-
SELECT * FROM table WHERE last_name="doe"
Nếu chỉ mục của bạn là (first_name
, last_name
) các truy vấn 1 và 2 sẽ sử dụng nó, truy vấn 3 thì không. Nếu chỉ mục của bạn là (last_name
, first_name
) truy vấn 1 và 3 sẽ sử dụng nó, truy vấn số 2 thì không. Thay đổi thứ tự điều kiện trong mệnh đề WHERE không có hiệu lực trong cả hai trường hợp.
Thông tin chi tiết có tại tại đây
Cập nhật :
Trong trường hợp ở trên không rõ ràng - MySQL chỉ có thể sử dụng một chỉ mục nếu các cột trong điều kiện truy vấn tạo thành tiền tố ngoài cùng bên trái của chỉ mục. Không thể sử dụng truy vấn số 2 ở trên (last_name
, first_name
) lập chỉ mục vì nó chỉ dựa trên first_name
và first_name
KHÔNG phải là tiền tố ngoài cùng bên trái của (last_name
, first_name
) chỉ mục.
Thứ tự của các điều kiện TRONG VÒNG truy vấn không quan trọng; truy vấn số 1 ở trên sẽ có thể sử dụng (last_name
, first_name
) chỉ mục tốt vì các điều kiện của nó là first_name
và last_name
và, khi kết hợp với nhau, chúng sẽ tạo thành tiền tố ngoài cùng bên trái của (last_name
, first_name
) chỉ mục.