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

Dołączanie trwa zbyt długo

Patrząc na wszystkie zaangażowane pola, indeks pokrywający w każdej tabeli obejmowałby wiele kolumn

t1: Y, F, H, A
t2: X, G, C, D, E

Jak selektywne są DOWOLNE z kryteriów:t2.X, t2.G lub t1.Y, t1.F, t1.H?

Jeśli żadna z poszczególnych kolumn nie jest wystarczająco selektywna (najlepiej 0,5% lub mniej), możesz na przykład utworzyć jeden lub kilka indeksów obejmujących wiele kolumn

t2 (G, X)
t1 (H, F, Y)

Uwaga: Kolejność kolumn w indeksie jest bardzo ważna – zawsze umieszczaj na początku najbardziej selektywne (ten, który dzieli dane w kolumnach na najbardziej odrębne zestawy).

Kosztem przechowywania można sprawić, by indeks pokrywał zapytanie, podając wszystkie niezbędne kolumny w samym indeksie. Oznacza to, że zapytanie w ogóle nie musi wracać do danych tabeli.

create index ix_t2 on t2 (G,X) INCLUDE (C,D,E)
create index ix_t1 on t1 (H,F,Y) INCLUDE (A)

EDYTUJ

Wygląda na to, że wsunąłem tam SQL Server DDL. W Oracle musiałbyś rozwinąć indeks, aby stał się t2 (G,X, C,D,E) - ale to zwiększa wymagania dotyczące selektywności użycia indeksu, ponieważ klucz indeksu staje się bardzo długi.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najczęstsze zapytania i podział na strony w Oracle

  2. Top n różnych wartości jednej kolumny w Oracle

  3. Nieprawidłowy identyfikator w podwójnie zagnieżdżonym zapytaniu z ORDER BY i ROWNUM

  4. Procedury Oracle w php z PDO

  5. Lewa składnia Oracle łączy trzy lub więcej tabel