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

Thứ tự của các bảng được tham chiếu trong mệnh đề ON của hàm JOIN có quan trọng không?

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 đề:

  1. 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
    
  2. Oracle có một gợi ý đặc biệt ORDERED để thực thi JOIN đặ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ên b :

    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ên a :

    SELECT  /*+ ORDERED */
            *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    
  3. 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ên b :

    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ên a :

    SELECT  *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    OPTION (FORCE ORDER)
    
  4. 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. XMLtable với Oracle 11g

  2. dbms_output.put_line

  3. Làm thế nào để hủy bỏ một hoạt động Cơ sở dữ liệu đã chạy lâu?

  4. Cách khôi phục bản vá sau giai đoạn chuyển đổi không thành công trong R12.2

  5. Làm cách nào để bạn kết nối với máy chủ LDAP bằng node-oracledb?