Nếu chúng tôi xem xét rằng bạn sử dụng INNER JOINthay vìLEFT JOIN (dường như là mục đích của bạn), hai truy vấn này tương đương về mặt chức năng. Trình tối ưu hóa truy vấn sẽ xem xét và đánh giá các tiêu chí trong WHEREmệnh đề và mệnh đề của bạn FROMvà xem xét tất cả các yếu tố này khi xây dựng kế hoạch truy vấn để đạt được kế hoạch thực hiện hiệu quả nhất. Nếu chúng ta thực hiện EXPLAINtrên cả hai câu lệnh, chúng ta sẽ nhận được cùng một kết quả:
Truy vấn 1 :
EXPLAIN
SELECT
tableA.ColA
,tableA.ColB
,tableA.ColC
,tableA.ColD
,tableA.ColE
FROM tableA
JOIN tableB ON tableA.ColA=tableB.ColA
WHERE
tableA.ColB=tableB.ColB
AND tableA.ColC=tableB.ColC
AND tableA.ColD=tableB.ColD
AND tableA.ColE=tableB.ColE
[Các kết quả] :
| ID | SELECT_TYPE | TABLE | TYPE | POSSIBLE_KEYS | KEY | KEY_LEN | REF | ROWS | EXTRA |
------------------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | tableA | ALL | (null) | (null) | (null) | (null) | 1 | |
| 1 | SIMPLE | tableB | ALL | (null) | (null) | (null) | (null) | 1 | Using where; Using join buffer |
Truy vấn 2 :
EXPLAIN
SELECT
tableA.ColA
,tableA.ColB
,tableA.ColC
,tableA.ColD
,tableA.ColE
FROM tableA
JOIN tableB ON tableA.ColA=tableB.ColA
AND tableA.ColB=tableB.ColB
AND tableA.ColC=tableB.ColC
AND tableA.ColD=tableB.ColD
WHERE
tableA.ColE=tableB.ColE
[Các kết quả] :
| ID | SELECT_TYPE | TABLE | TYPE | POSSIBLE_KEYS | KEY | KEY_LEN | REF | ROWS | EXTRA |
------------------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | tableA | ALL | (null) | (null) | (null) | (null) | 1 | |
| 1 | SIMPLE | tableB | ALL | (null) | (null) | (null) | (null) | 1 | Using where; Using join buffer |
Bạn có thể xem lại chi tiết đầy đủ với các liên kết sau. Tôi cũng đã tạo một ví dụ SQL 2008 để bạn có thể so sánh cách hai công cụ hoạt động (giống nhau):
Ví dụ truy vấn MySQL
Ví dụ truy vấn SQL 2008 (Đảm bảo bạn 'Xem Kế hoạch thực hiện' cho cả hai kết quả)
INNER JOIN, nhưng vớiLEFT JOINđiều này sẽ trả lại kết quả khác nhau. Về cơ bản, các điều kiện mà bạn đã thêm vàoWHEREtruy vấn thứ hai là chuyển đổiJOINtrên mộtINNER JOIN