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

Có sự khác biệt về hiệu suất giữa BETWEEN và IN với MySQL hoặc trong SQL nói chung không?

BETWEEN nên vượt trội hơn IN trong trường hợp này (nhưng làm đo lường và kiểm tra các kế hoạch thực thi!), đặc biệt là n ngày càng tăng và khi số liệu thống kê vẫn chính xác. Giả sử:

  • m là kích thước của bàn của bạn
  • n là kích thước trong phạm vi của bạn

Chỉ mục có thể được sử dụng (n nhỏ so với m )

  • Về lý thuyết, BETWEEN có thể được triển khai bằng một lần "quét phạm vi" (Oracle speak) trên chỉ mục khóa chính và sau đó duyệt qua nhiều nhất n các nút lá chỉ mục. Độ phức tạp sẽ là O(n + log m)

  • IN thường được triển khai dưới dạng một chuỗi (vòng lặp) n "quét phạm vi" trên chỉ mục khóa chính. Với m là kích thước của bảng, độ phức tạp sẽ luôn là O(n * log m) ... điều này luôn tệ hơn (không di động đối với các bảng rất nhỏ m hoặc phạm vi rất nhỏ n )

Không thể sử dụng chỉ mục (n là một phần quan trọng của m )

Trong mọi trường hợp, bạn sẽ quét toàn bộ bảng và đánh giá vị từ trên mỗi hàng:

  • BETWEEN cần đánh giá hai vị từ:Một cho giới hạn dưới và một cho giới hạn trên. Độ phức tạp là O(m)

  • IN cần đánh giá nhiều nhất n các vị ngữ. Độ phức tạp là O(m * n) ... một lần nữa luôn tệ hơn, hoặc có lẽ O(m) nếu cơ sở dữ liệu có thể tối ưu hóa IN danh sách là một bản đồ băm, thay vì một danh sách các vị từ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 500 - Đã xảy ra lỗi - Hàm DB không báo lỗi khi thêm bài viết mới trong Joomla

  2. Hai thiết bị khác nhau có thể có cùng ID đăng ký GCM không?

  3. Python MySQL sai kiến ​​trúc lỗi

  4. Cardinality có thể khác nhau đối với các chỉ mục trùng lặp trong mysql không?

  5. Tham gia MySQL nâng cao. Tăng tốc truy vấn