sql >> Databasteknik >  >> RDS >> Oracle

Gå med tar för lång tid

Om man tittar på alla inblandade fält skulle ett täckande index på varje tabell involvera maj-kolumner

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

Hur selektiva är NÅGRA av kriterierna:t2.X, t2.G eller t1.Y, t1.F, t1.H ?

Om ingen av de enskilda kolumnerna är tillräckligt selektiva (helst 0,5 % eller mindre) kanske du vill skapa ett eller flera täckande index som omfattar flera kolumner, till exempel

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

Obs! Ordningen på kolumner i ett index är mycket viktig – sätt alltid den mest selektiva (den som delar upp kolumndata i de mest distinkta uppsättningarna) först.

På bekostnad av lagring kan du göra indexet COVER frågan genom att tillhandahålla alla nödvändiga kolumner i själva indexet. Det betyder att frågan inte alls behöver gå tillbaka till tabelldata.

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

REDIGERA

Det verkar som att jag stoppade in en SQL Server DDL där. I Oracle skulle du behöva utöka indexet för att bli t2 (G,X, C,D,E) - men det ökar selektivitetskraven för indexanvändning eftersom indexnyckeln blir väldigt lång.




  1. Återställer SQL Server Master Database

  2. Dumpar MySQL-tabeller till JSON med Golang

  3. Hitta rader där textmatrisen innehåller värde som liknar indata

  4. Hur synkroniserar man två tabeller med olika MySQL-databaser på samma maskin?