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

Khi tham gia vào một bảng rất nhỏ / trống tại sao MySQL thực hiện quét toàn bộ mặc dù tôi đang sử dụng LIMIT?

Trình tối ưu hóa MySQL sẽ quyết định thứ tự / phương thức tham gia đầu tiên, sau đó kiểm tra xem đối với thứ tự tham gia đã chọn, có thể tránh sắp xếp bằng cách sử dụng chỉ mục hay không. Đối với truy vấn chậm trong câu hỏi này, trình tối ưu hóa đã quyết định sử dụng tham gia Block-Nested-Loop (BNL).

BNL thường nhanh hơn so với sử dụng chỉ mục khi một trong các bảng rất nhỏ (và không có GIỚI HẠN).

Tuy nhiên, với BNL, các hàng sẽ không nhất thiết phải theo thứ tự được đưa ra bởi bảng đầu tiên. Do đó, kết quả của phép nối cần được sắp xếp trước khi áp dụng LIMIT.

Bạn có thể tắt BNL bằng cách set optimizer_switch = 'block_nested_loop=off';



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel + Vagrant =Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost'

  2. Menu cây xây dựng PHP / MySQL

  3. Dấu hỏi Json (??????) thay vì ký tự tiếng Do Thái

  4. JSON_CONTAINS () Ví dụ trong MySQL

  5. Làm cách nào để lưu trữ một giá trị từ truy vấn sql vào một biến?