Oracle
 sql >> Database >  >> RDS >> Oracle

L'adesione richiede troppo tempo

Osservando tutti i campi coinvolti, un indice di copertura su ciascuna tabella comporterebbe colonne di maggio

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

Quanto sono selettivi QUALCUNO dei criteri:t2.X, t2.G o t1.Y, t1.F, t1.H?

Se nessuna delle singole colonne è sufficientemente selettiva (idealmente 0,5% o meno), potresti voler creare uno o più indici di copertura che coinvolgano più colonne, ad esempio

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

Nota: L'ordine delle colonne in un indice è molto importante:metti sempre per primo il più selettivo (quello che divide i dati delle colonne negli insiemi più distinti).

A scapito dello storage, puoi fare in modo che l'indice COVER la query fornendo tutte le colonne necessarie nell'indice stesso. Ciò significa che non è necessario che la query torni ai dati della tabella.

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

MODIFICA

Sembra che ci sia stato inserito un DDL di SQL Server. In Oracle, dovresti espandere l'indice per diventare t2 (G,X, C,D,E), ma ciò aumenta i requisiti di selettività per l'utilizzo dell'indice poiché la chiave dell'indice diventa molto lunga.