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

Sử dụng câu lệnh OR trên WHERE trong MySql gây ra lỗi chậm

Có, OR thường là một kẻ giết người về hiệu suất. Công việc chung là thực hiện UNION . Ví dụ của bạn:

SELECT  *
    FROM  `posts`
    LEFT JOIN  `teams_users`
               ON (teams_users.team_id=posts.team_id
              AND  teams_users.user_id='7135')
    WHERE  (teams_users.status='1')
UNION DISTINCT
SELECT  *
    FROM  `posts`
    LEFT JOIN  `teams_users`
               ON (teams_users.team_id=posts.team_id
              AND  teams_users.user_id='7135')
    WHERE  (posts.user_id='7135');

Nếu bạn chắc chắn không có lỗi, hãy đổi sang UNION ALL nhanh hơn .

Nếu bạn không câu cá vì thiếu team_users hàng, sử dụng JOIN thay vì LEFT JOIN .

Nếu bạn cần ORDER BY , thêm một số parens:

( SELECT ... )
UNION ...
( SELECT ... )
ORDER BY ...

Nếu không, ORDER BY sẽ chỉ áp dụng cho SELECT thứ hai . (Nếu bạn cũng cần 'phân trang', hãy xem blog của tôi .)

Xin lưu ý rằng bạn cũng có thể cần LIMIT trong những trường hợp nhất định.



  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ẬP NHẬT Nguyên tử MySQL trong InnoDB vs MyISAM

  2. Chọn 3 bản ghi gần đây nhất trong đó các giá trị của một cột là khác nhau

  3. Mệnh đề IN SQL - lấy lại các phần tử IN không khớp

  4. Làm thế nào để làm tròn xuống số nguyên gần nhất trong MySQL?

  5. Tìm kiếm và lọc / tinh chỉnh kết quả cơ sở dữ liệu trong Laravel 4