Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Apakah urutan tabel yang dirujuk dalam klausa ON pada JOIN penting?

JOIN urutan dapat dipaksakan dengan meletakkan tabel dalam urutan yang benar di FROM klausa:

  1. MySQL memiliki klausa khusus yang disebut STRAIGHT_JOIN yang membuat pesanan menjadi penting.

    Ini akan menggunakan indeks di b.id :

    SELECT  a.Name, b.Status
    FROM    a
    STRAIGHT_JOIN
            b
    ON      b.ID = a.StatusID
    

    Dan ini akan menggunakan indeks pada a.StatusID :

    SELECT  a.Name, b.Status
    FROM    b
    STRAIGHT_JOIN
            a
    ON      b.ID = a.StatusID
    
  2. Oracle memiliki petunjuk khusus ORDERED untuk menegakkan JOIN pesanan:

    Ini akan menggunakan indeks di b.id atau buat tabel hash di b :

    SELECT  /*+ ORDERED */
            *
    FROM    a
    JOIN    b
    ON      b.ID = a.StatusID
    

    Dan ini akan menggunakan indeks pada a.StatusID atau buat tabel hash di a :

    SELECT  /*+ ORDERED */
            *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    
  3. SQL Server memiliki petunjuk yang disebut FORCE ORDER untuk melakukan hal yang sama:

    Ini akan menggunakan indeks di b.id atau buat tabel hash di b :

    SELECT  *
    FROM    a
    JOIN    b
    ON      b.ID = a.StatusID
    OPTION (FORCE ORDER)
    

    Dan ini akan menggunakan indeks pada a.StatusID atau buat tabel hash di a :

    SELECT  *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    OPTION (FORCE ORDER)
    
  4. PostgreSQL teman-teman, maaf. Daftar TODO . Anda mengatakan:

    Petunjuk pengoptimal (tidak diinginkan)

    Petunjuk pengoptimal digunakan untuk mengatasi masalah di pengoptimal. Kami lebih suka masalah dilaporkan dan diperbaiki.

Adapun urutan perbandingan, tidak masalah dalam RDBMS , AFAIK.

Padahal saya pribadi selalu mencoba memperkirakan kolom mana yang akan dicari dan meletakkan kolom ini di sebelah kiri (agar terlihat seperti lvalue ).

Lihat jawaban ini untuk lebih detail.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle JDBC:nama pengguna/kata sandi tidak valid (ora-01017)

  2. Mengapa di SQL NULL tidak bisa cocok dengan NULL?

  3. Mengapa urutan sortir varchar Oracle tidak cocok dengan perilaku perbandingan varchar?

  4. Masukkan gumpalan di database Oracle dengan C #

  5. Oracle Pro*C/OCI menginstal handler untuk SIGSEGV/SIGABRT dan teman-teman - mengapa, dan bagaimana cara menonaktifkannya?