Chi phí duy trì một chỉ mục (một cột hoặc nhiều cột) hầu như luôn luôn bị vượt lên bởi sự cải thiện hiệu suất khi chỉ mục đó được sử dụng. Nó là một gia số nhỏ trên mỗi INSERT
/ DELETE
, cộng với chi phí nếu thay đổi giá trị của trường được lập chỉ mục qua UPDATE
. (UPDATE
rất hiếm.) Vì vậy, đừng lo lắng về chi phí "duy trì một chỉ số kết hợp".
WHERE `vehicles`.`type` IN ('Car')
AND `vehicles`.`user_id` = 10
cần INDEX(user_id, type)
.
Trình tối ưu hóa sẽ
- khám phá rằng chỉ mục đó là một ứng cử viên khả thi,
- kiểm tra một số thống kê, sau đó
- sử dụng chỉ mục hoặc quyết định bản số kém và chỉ cần quét bảng.
Bao gồm các chỉ số; đừng lo lắng về điều đó.
Tôi đã sắp xếp các trường theo cách đó, không phải (type, user_id)
dựa trên IN
của bạn , ngụ ý rằng đôi khi bạn có thể có nhiều giá trị cho type
.
Nếu tất cả các hàng trong bảng có type = 'Car'
, không vấn đề gì. Mọi thứ tôi đã nói vẫn được áp dụng. Sự lãng phí của việc bao gồm type
không cần thiết không đáng kể.
Tốt hơn là nên có tất cả (các) cột "=" trước trong một chỉ mục, sau đó nhiều nhất là một trường khác. Thảo luận thêm tại đây .