Kế hoạch truy vấn cho OR
trường hợp xuất hiện để chỉ ra rằng MySQL
thực sự đang sử dụng các chỉ mục, rõ ràng là có, nó có thể làm được, ít nhất là trong trường hợp này. Điều đó có vẻ hoàn toàn hợp lý, bởi vì có một chỉ mục trên seen
và id
là PK.
Nếu "các giải thích hợp lý và hợp lý" mâu thuẫn với thực tế, thì có thể yên tâm cho rằng lôgic đó là thiếu sót hoặc các giải thích sai hoặc không thể áp dụng được. Hiệu suất nổi tiếng là khó dự đoán; kiểm tra hiệu suất là điều cần thiết khi tốc độ là quan trọng.
Bạn nên sử dụng cái mà kiểm tra nhanh hơn trên đầu vào, mô hình hóa đầy đủ mà chương trình sẽ thấy khi sử dụng thực tế.
Tuy nhiên, cũng lưu ý rằng hai truy vấn của bạn không tương đương về mặt ngữ nghĩa:nếu hàng có id = 5204
cũng có seen = 3
sau đó là OR
truy vấn sẽ trả về nó một lần, nhưng UNION ALL
truy vấn sẽ trả về nó hai lần. Việc lựa chọn giữa mã đúng và mã sai trên bất kỳ cơ sở nào khác với mã đúng là vô nghĩa.