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

Đang cố gắng tối ưu hóa truy vấn MySQL với LEFT OUTER JOIN

Thật không may, mysql (và có lẽ bất kỳ dbms nào) không thể tối ưu hóa các biểu thức như jobs.status != 331 and ack = 0 bởi vì B-Tree không phải là một cấu trúc cho phép tìm nhanh bất cứ thứ gì không-bằng-với-một-giá trị-hằng-số. Vì vậy, bạn sẽ luôn nhận được toàn bộ.

Nếu có một số điều kiện tốt hơn như jobs.status = 331 and ack = 0 (lưu ý thực tế là tôi đã thay đổi != thành = ) thì đó sẽ là một lời khuyên để tăng tốc truy vấn này:

  1. tách truy vấn thành 2, được nối bởi UNION ALL
  2. thay thế trong một truy vấn LEFT JOIN tới INNER JOIN (trong câu ngụ ý rằng wq.info is not NULL )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách so sánh hai cột trong MySQL

  2. MySQL:CHỌN GIÁ TRỊ DUY NHẤT

  3. laravel 4 - làm thế nào để Giới hạn (Lấy và Bỏ qua) cho ORM Hùng biện?

  4. CakePHP Số lượng phân trang không khớp với truy vấn?

  5. Làm cách nào để nhóm dữ liệu mảng được trả về bởi truy vấn nối trái trong php?