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

Deltag tager for lang tid

Ser man på alle de involverede felter, vil et dækkende indeks på hver tabel involvere maj-kolonner

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

Hvor selektive er NOGEN af kriterierne:t2.X, t2.G eller t1.Y, t1.F, t1.H ?

Hvis ingen af ​​de individuelle kolonner er selektive nok (ideelt set 0,5 % eller mindre), vil du måske oprette et eller flere dækkende indeks, der involverer flere kolonner, for eksempel

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

Bemærk: Rækkefølgen af ​​kolonner i et indeks er meget vigtig - sæt altid den mest selektive (den, der deler kolonnedataene op i de mest distinkte sæt) først.

På bekostning af opbevaring kan du få indekset til at DÆKKE forespørgslen ved at angive alle de nødvendige kolonner i selve indekset. Det betyder, at forespørgslen slet ikke behøver at gå tilbage til tabeldata.

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

REDIGER

Det ser ud til, at jeg smuttede en SQL Server DDL derind. I Oracle ville du skulle udvide indekset til at blive t2 (G,X, C,D,E) - men det øger selektivitetskravene til indeksbrug, da indeksnøglen bliver meget lang.




  1. MySql + entity framework =Hver afledt tabel skal have sit eget alias

  2. NULL-kompleksiteter – del 2

  3. UTF8-tegn vises ikke korrekt med datatabeller og yadcf

  4. Problem med MYSQL specielle tegn