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.StatusIDVà đ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.idhoặc xây dựng bảng băm trênb:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusIDVà điều này sẽ sử dụng một chỉ mục trên
a.StatusIDhoặ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.idhoặ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.StatusIDhoặ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.