sql >> Database >  >> RDS >> Oracle

Meedoen duurt te lang

Als we naar alle betrokken velden kijken, zou een dekkingsindex op elke tabel kunnen bestaan ​​uit meerdere kolommen

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

Hoe selectief zijn ELK van de criteria:t2.X, t2.G of t1.Y, t1.F, t1.H ?

Als geen van de afzonderlijke kolommen selectief genoeg is (idealiter 0,5% of minder), wilt u misschien een of meerdere dekkingsindexen maken met meerdere kolommen, bijvoorbeeld

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

Opmerking: De volgorde van kolommen in een index is erg belangrijk - zet altijd eerst de meest selectieve (degene die de kolomgegevens in de meest verschillende sets verdeelt).

Ten koste van de opslag kunt u ervoor zorgen dat de index de query dekt door alle benodigde kolommen in de index zelf op te geven. Dit betekent dat de query helemaal niet terug hoeft te gaan naar tabelgegevens.

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

BEWERKEN

Het lijkt erop dat ik er een SQL Server DDL in heb gestopt. In Oracle zou je de index moeten uitbreiden om t2 (G,X, C,D,E) te worden - maar dat verhoogt de selectiviteitsvereisten voor indexgebruik omdat de indexsleutel erg lang wordt.




  1. Row_to_json() gebruiken met geneste joins

  2. Een Unix-tijdstempel converteren naar een datum/tijd-waarde in SQL Server

  3. Hoe de grootte van alle tabellen in een database in MySQL te controleren

  4. Hoe kap je een tabel af met Doctrine 2?