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

Left Join vượt trội hơn Inner Join?

Nếu bạn nghĩ rằng việc triển khai LEFT JOIN là INNER JOIN + nhiều công việc hơn, thì kết quả này thật khó hiểu. Điều gì sẽ xảy ra nếu việc triển khai INNER JOIN là (LEFT JOIN + filter)? À, giờ thì đã rõ.

Trong các kế hoạch truy vấn, điểm khác biệt duy nhất là: người dùng ... bổ sung:sử dụng ở đâu . Điều này có nghĩa là lọc. Có một bước lọc bổ sung trong truy vấn với liên kết bên trong.

Đây là một kiểu lọc khác với kiểu lọc thường được sử dụng trong mệnh đề where. Thật đơn giản để tạo một chỉ mục trên A để hỗ trợ hành động lọc này.

SELECT *
FROM A
WHERE A.ID = 3

Hãy xem xét truy vấn này:

SELECT *
FROM A
  LEFT JOIN B
  ON A.ID = B.ID
WHERE B.ID is not null

Truy vấn này tương đương với tham gia bên trong. Không có chỉ mục nào trên B sẽ giúp ích cho hành động lọc đó. Lý do là mệnh đề where đang nêu một điều kiện về kết quả của phép nối, thay vì điều kiện trên B.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. gặp lỗi cú pháp khi tạo hàm

  2. thiết lập phiên bản cơ sở dữ liệu đích để di chuyển bàn làm việc mysql

  3. Đối tượng MySQLConverter 'không có thuộc tính' _tuple_to_mysql 'ngoại lệ với mysql-connector

  4. Truy vấn để nhận giá trị thấp nhất lớn hơn 0 ans không phải là NULL

  5. chọn các hàng đã xảy ra nhiều hơn ba lần