Tôi không đồng ý với một số câu trả lời về câu hỏi này.
Có một điều như là quá nhiều chỉ mục?
Tất nhiên. Không tạo chỉ mục không được sử dụng bởi bất kỳ truy vấn nào của bạn. Đừng tạo các chỉ mục thừa. Sử dụng các công cụ như pt-trùng lặp-key-checker và pt-index-using để giúp bạn khám phá các chỉ mục mà bạn không cần.
Điều gì sẽ tăng tốc các chỉ mục?
- Điều kiện tìm kiếm trong mệnh đề WHERE.
- Điều kiện tham gia.
- Một số trường hợp ORDER BY.
- Một số trường hợp GROUP BY.
- Ràng buộc DUY NHẤT.
- Ràng buộc NGOẠI KHÓA.
- Tìm kiếm FULLTEXT.
Các câu trả lời khác đã khuyên rằng INSERT / UPDATE / DELETE càng chậm khi bạn có nhiều chỉ mục hơn. Điều đó đúng, nhưng hãy xem xét rằng nhiều cách sử dụng UPDATE và DELETE cũng có mệnh đề WHERE và trong MySQL, UPDATE và DELETE cũng hỗ trợ JOIN. Chỉ mục có thể có lợi cho những truy vấn này hơn là bù đắp chi phí cập nhật chỉ mục.
Ngoài ra, InnoDB khóa các hàng bị ảnh hưởng bởi CẬP NHẬT hoặc XÓA. Họ gọi đây là khóa cấp độ hàng, nhưng nó thực sự là khóa cấp chỉ mục. Nếu không có chỉ mục để thu hẹp tìm kiếm, InnoDB phải khóa nhiều hàng hơn hàng cụ thể mà bạn đang thay đổi. Nó thậm chí có thể khóa tất cả các hàng trong bảng. Các khóa này chặn các thay đổi được thực hiện bởi các máy khách khác, ngay cả khi chúng không xung đột về mặt logic.
Khi nào thì nên thêm một chỉ mục?
Nếu bạn biết bạn cần chạy một truy vấn có lợi từ một chỉ mục trong một trong các trường hợp trên.
Khi nào thì nên thêm một chỉ mục?
Nếu chỉ mục là tiền tố bên trái của một chỉ mục hiện có khác hoặc chỉ mục không giúp bất kỳ truy vấn nào bạn cần chạy.
Pro và Con của nhiều chỉ mục so với chỉ mục nhiều cột?
Trong một số trường hợp, MySQL có thể thực hiện tối ưu hóa hợp nhất chỉ mục và kết hợp hoặc cắt các kết quả từ các tìm kiếm chỉ mục độc lập. Nhưng nó mang lại hiệu suất tốt hơn để xác định một chỉ mục duy nhất nên việc hợp nhất chỉ mục không cần phải thực hiện.
Đối với một trong những khách hàng tư vấn của tôi, tôi đã xác định một chỉ mục nhiều cột trên một bảng nhiều cột trong đó không có chỉ mục nào và cải thiện truy vấn kết hợp của họ với hệ số 94 triệu!
Thiết kế các chỉ mục phù hợp là một quá trình phức tạp, dựa trên các truy vấn bạn cần để tối ưu hóa . Bạn không nên đưa ra các quy tắc rộng như "lập chỉ mục mọi thứ" hoặc "không lập chỉ mục gì để tránh làm chậm cập nhật".
Xem thêm bài thuyết trình của tôi về Cách thiết kế chỉ mục, Thực sự .