Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Czy kolejność tabel, do których odwołuje się klauzula ON w JOIN, ma znaczenie?

JOIN kolejność można wymusić umieszczając tabele we właściwej kolejności w FROM klauzula:

  1. MySQL ma specjalną klauzulę o nazwie STRAIGHT_JOIN co sprawia, że ​​kolejność ma znaczenie.

    Użyje to indeksu na b.id :

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

    A to użyje indeksu na a.StatusID :

    SELECT  a.Name, b.Status
    FROM    b
    STRAIGHT_JOIN
            a
    ON      b.ID = a.StatusID
    
  2. Oracle ma specjalną wskazówkę ORDERED aby wymusić JOIN kolejność:

    Użyje to indeksu na b.id lub zbuduj tablicę mieszającą na b :

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

    A to użyje indeksu na a.StatusID lub zbuduj tablicę mieszającą na a :

    SELECT  /*+ ORDERED */
            *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    
  3. SQL Server ma wskazówkę o nazwie FORCE ORDER zrobić to samo:

    Użyje to indeksu na b.id lub zbuduj tablicę mieszającą na b :

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

    A to użyje indeksu na a.StatusID lub zbuduj tablicę mieszającą na a :

    SELECT  *
    FROM    b
    JOIN    a
    ON      b.ID = a.StatusID
    OPTION (FORCE ORDER)
    
  4. Przykro mi, chłopaki z PostgreSQL. Twoja lista TODO mówi:

    Wskazówki dotyczące Optymalizatora (niechciane)

    Wskazówki optymalizatora służą do obejścia problemów w optymalizatorze. Wolelibyśmy, aby problemy zostały zgłoszone i naprawione.

Jeśli chodzi o kolejność w porównaniu, nie ma to znaczenia w żadnym RDBMS , AFAIK.

Chociaż ja osobiście zawsze staram się oszacować, która kolumna będzie wyszukiwana i umieścić tę kolumnę po lewej stronie (aby wyglądała jak lvalue ).

Zobacz tę odpowiedź po więcej szczegółów.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa klauzula „w” w Oracle?

  2. wybierz TOP N wierszy z tabeli

  3. Jak utworzyć zdefiniowaną przez użytkownika zmienną typu danych rekordu w bazie danych Oracle

  4. Funkcja dzielenia w Oracle na wartości oddzielone przecinkami z automatyczną sekwencją

  5. pobrać parametr z procedury składowanej?