Tôi đã gặp phải vấn đề này trước đây. Đây là phân tích của tôi về nó.
-
Nó xảy ra trong MySQL 5.7 và 8.0, nhưng dường như không phải trong các phiên bản cũ hơn và không phải trong MariaDB.
-
"Giải pháp" tôi thích là thay đổi các chỉ mục như vậy:
INDEX(company_id) -- DROP this INDEX(company_id, id) -- ADD this
Mặc dù chỉ mục 2 cột về mặt lý thuyết giống hệt với chỉ mục một cột cho InnoDB (giả sử id
là PK`), Trình tối ưu hóa dường như bỏ qua thực tế này trong một số tình huống .
Ngoài ra, tôi muốn thêm PK một cách rõ ràng khi tôi thấy cần . Điều này báo hiệu cho những người đọc giản đồ trong tương lai (bao gồm cả tôi) rằng một số truy vấn được hưởng lợi từ PK được thêm vào.
Tôi vẫn chưa tìm thấy trường hợp "hợp nhất chỉ mục nào giao nhau" nhanh hơn chỉ mục tổng hợp tương đương.
Tôi không thích sử dụng "gợi ý" chỉ mục vì sợ rằng phân phối dữ liệu sẽ thay đổi trong tương lai và "gợi ý" của tôi sẽ khiến mọi thứ tồi tệ hơn.