Bạn phải hiểu trong MySQL (trong trường hợp là InnoDB), nó chỉ sử dụng tiền tố bên trái nhất trong các chỉ mục của bạn. Vì vậy, nếu chỉ mục nằm trong Field1 + Field2, chỉ truy vấn với Field2 trong WHERE không thể sử dụng toàn bộ chỉ mục.
Và nếu Field1 + Field2 + Field3
là chỉ mục, một truy vấn chỉ có Field1 & Field3
ở WHERE điều tương tự sẽ xảy ra.
Tùy chọn 1
Bạn sẽ phải tạo một chỉ mục riêng cho từng tình huống tìm kiếm nếu bạn muốn tối ưu hóa từng tìm kiếm. Tuy nhiên, nếu các bảng lớn, thì các chỉ mục cũng sẽ trở nên cực kỳ lớn. Nếu những truy vấn tìm kiếm đó được thực hiện rất thường xuyên, điều này sẽ rất đáng giá.
Tùy chọn 2
Bạn có thể sử dụng một thủ thuật tiện lợi nếu các tìm kiếm của bạn có tính chọn lọc thấp (tức là Giới tính) bằng cách đặt các cột có độ chọn lọc thấp về bên trái nhiều nhất và sử dụng Gender IN(M, F)
để đưa nó vào WHERE cùng với (các) cột khác để sử dụng toàn bộ chỉ mục.