Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Der Beitritt dauert zu lange

Betrachtet man alle beteiligten Felder, würde ein abdeckender Index für jede Tabelle viele Spalten umfassen

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

Wie selektiv sind IRGENDEINE der Kriterien:t2.X, t2.G oder t1.Y, t1.F, t1.H ?

Wenn keine der einzelnen Spalten selektiv genug ist (idealerweise 0,5 % oder weniger), können Sie beispielsweise einen oder mehrere überdeckende Indizes erstellen, die mehrere Spalten umfassen

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

Hinweis: Die Reihenfolge der Spalten in einem Index ist sehr wichtig - setzen Sie immer die selektivste (diejenige, die die Spaltendaten in die unterschiedlichsten Sätze unterteilt) zuerst.

Auf Kosten des Speichers können Sie den Index dazu bringen, die Abfrage abzudecken, indem Sie alle erforderlichen Spalten im Index selbst bereitstellen. Das bedeutet, dass die Abfrage überhaupt nicht auf Tabellendaten zurückgehen muss.

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

BEARBEITEN

Sieht so aus, als hätte ich dort eine SQL Server-DDL eingefügt. In Oracle müssten Sie den Index erweitern, um t2 (G,X, C,D,E) zu werden - aber das erhöht die Selektivitätsanforderungen für die Indexnutzung, da der Indexschlüssel sehr lang wird.