Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mệnh đề SQL IN chậm hơn các truy vấn riêng lẻ

Đây là một thiếu sót đã biết trong MySQL.

Việc sử dụng UNION thường đúng hoạt động tốt hơn truy vấn phạm vi như truy vấn bạn hiển thị. MySQL không sử dụng các chỉ mục một cách thông minh cho các biểu thức sử dụng IN (...) . Một lỗ hổng tương tự tồn tại trong trình tối ưu hóa cho các biểu thức boolean với OR .

Xem http ://www.mysqlperformanceblog.com/2006/08/10/using-union-to-implement-loose-index-scan-to-mysql/ để biết một số giải thích và điểm chuẩn chi tiết.

Trình tối ưu hóa luôn được cải thiện. Sự thiếu sót trong một phiên bản MySQL có thể được cải thiện trong phiên bản tiếp theo. Vì vậy, bạn nên thử nghiệm các truy vấn của mình trên các phiên bản khác nhau.

Cũng có lợi khi sử dụng UNION ALL thay vì chỉ là UNION . Cả hai truy vấn đều sử dụng bảng tạm thời để lưu trữ kết quả, nhưng sự khác biệt là UNION áp dụng DISTINCT vào tập kết quả, sẽ phát sinh thêm một loại chưa được lập chỉ mục.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ý nghĩa của các ký tự được trích dẫn dấu trọng âm (AKA backtick) trong MySQL là gì?

  2. Thay đổi cột trong MySQL từ int thành double?

  3. Thứ tự LaravelBằng số lượng mối quan hệ

  4. Hành vi của MySQL về CẬP NHẬT KHÓA KÉP BẬT cho nhiều trường DUY NHẤT

  5. Nhiều bảng hay một bảng lớn trong SQL?