JOIN
thứ tự có thể được buộc bằng cách đặt các bảng theo đúng thứ tự trong FROM
mệnh đề:
-
MySQL có một mệnh đề đặc biệt được gọi là
STRAIGHT_JOIN
điều này làm cho đơn đặt hàng trở nên quan trọng.Điều này sẽ sử dụng một chỉ mục trên
b.id
:SELECT a.Name, b.Status FROM a STRAIGHT_JOIN b ON b.ID = a.StatusID
Và điều này sẽ sử dụng một chỉ mục trên
a.StatusID
:SELECT a.Name, b.Status FROM b STRAIGHT_JOIN a ON b.ID = a.StatusID
-
Oracle có một gợi ý đặc biệt
ORDERED
để thực thiJOIN
đặt hàng:Điều này sẽ sử dụng một chỉ mục trên
b.id
hoặc xây dựng bảng băm trênb
:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusID
Và điều này sẽ sử dụng một chỉ mục trên
a.StatusID
hoặc xây dựng bảng băm trêna
:SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID
-
SQL Server có một gợi ý được gọi là
FORCE ORDER
để làm tương tự:Điều này sẽ sử dụng một chỉ mục trên
b.id
hoặc xây dựng bảng băm trênb
:SELECT * FROM a JOIN b ON b.ID = a.StatusID OPTION (FORCE ORDER)
Và điều này sẽ sử dụng một chỉ mục trên
a.StatusID
hoặc xây dựng bảng băm trêna
:SELECT * FROM b JOIN a ON b.ID = a.StatusID OPTION (FORCE ORDER)
-
Xin lỗi các bạn PostgreSQL. Danh sách CẦN LÀM của bạn nói:
Gợi ý về trình tối ưu hóa (không muốn)
Các gợi ý về trình tối ưu hóa được sử dụng để giải quyết các vấn đề trong trình tối ưu hóa. Chúng tôi muốn các vấn đề được báo cáo và khắc phục.
Đối với thứ tự trong so sánh, nó không quan trọng trong bất kỳ RDBMS
nào , AFAIK.
Mặc dù cá nhân tôi luôn cố gắng ước tính cột nào sẽ được tìm kiếm và đặt cột này ở bên trái (vì nó có vẻ giống như một lvalue
).
Xem câu trả lời này để biết thêm chi tiết.