Quy tắc chung cho các chỉ mục là đặt một cái vào bất kỳ trường nào được sử dụng trong WHERE
hoặc JOIN
mệnh đề.
Điều đó đang được nói, có một số tối ưu hóa bạn có thể làm. Nếu bạn BIẾT rằng một tổ hợp trường nhất định là trường duy nhất sẽ được sử dụng trong WHERE trên một bảng cụ thể, sau đó bạn có thể tạo một khóa đa trường duy nhất trên các trường đó, ví dụ:
INDEX (field1, field2, field5)
v.s.
INDEX (field1),
INDEX (field2),
INDEX (field5)
Chỉ mục đa trường có thể hiệu quả hơn trong nhiều trường hợp, chẳng hạn như phải quét nhiều chỉ mục. Nhược điểm là chỉ mục đa trường chỉ có thể sử dụng được nếu các trường được đề cập thực sự được sử dụng trong mệnh đề WHERE.
Với các truy vấn mẫu của bạn, vì element
và field_id
nằm trong cả ba chỉ mục, bạn có thể tốt hơn nên tách chúng thành chỉ mục chuyên dụng của riêng chúng. Nếu đây là những trường có thể thay đổi, thì tốt hơn nên giữ nó chỉ mục dành riêng cho chúng. ví dụ. nếu bạn phải thay đổi field_id
hàng loạt, DB phải cập nhật 3 chỉ mục khác nhau, v.s. chỉ cập nhật một cái dành riêng.
Nhưng tất cả đều phụ thuộc vào việc đo điểm chuẩn - hãy kiểm tra thiết lập cụ thể của bạn với các thiết lập chỉ mục khác nhau và xem thiết lập nào hoạt động tốt nhất. Quy tắc ngón tay cái rất hữu ích, nhưng không phải lúc nào cũng hoạt động 100%.