Helpex - Trao đổi & giúp đỡ Đăng nhập
6

Để trả lời cho câu hỏi SQL này , tôi đã gặp một tuyên bố rằng IN()toán tử giá trị cố định chậm hơn nhiều so INNER JOINvới cùng một nội dung, đến mức tốt hơn là tạo bảng tạm thời cho các giá trị và THAM GIA chúng. Nó có đúng không (nói chung, với MySQL, bất kỳ công cụ SQL nào khác) và nếu có - tại sao? Theo trực quan, INsẽ nhanh hơn - bạn đang so sánh kết hợp tiềm năng với một tập hợp giá trị cố định, đã có trong bộ nhớ và ở định dạng cần thiết, trong khi với JOIN, bạn phải tham khảo các chỉ mục, có khả năng tải dữ liệu từ đĩa và thực hiện các thao tác khác có thể không cần thiết với IN. Tôi có thiếu một cái gì đó quan trọng không?

Lưu ý rằng không giống như câu hỏi này và nó có nhiều bản sao, tôi đang nói về IN()việc có một bộ giá trị cố định, không phải truy vấn con.

6 hữu ích 4 bình luận 3.9k xem chia sẻ
7

Điều này liên quan đến độ dài của mệnh đề IN - và những gì đôi khi được gọi là BUG trong MySQL.

MySQL dường như có ngưỡng thấp đối với mệnh đề IN, khi nó sẽ hoán đổi thành QUÉT BẢNG / CHỈ SỐ thay vì thu thập nhiều phân vùng (một phân vùng cho mỗi mục IN) và hợp nhất chúng.

Với INNER JOIN, hầu như luôn bị buộc phải sử dụng từng hàng trực tiếp trong bộ sưu tập JOIN, đó là lý do tại sao nó đôi khi nhanh hơn

Tham khảo các trang hướng dẫn sử dụng MySQL này

Tôi có thể sai vì nó dường như ngụ ý rằng IN (constant value list)nên luôn sử dụng tìm kiếm nhị phân trên mỗi mục ...

7 hữu ích 3 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ sql mysql , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading