Oracle
's indekser er aldrig "ubalancerede":hvert blad i indekset er i samme dybde som ethvert andet blad.
Ingen sideopdeling introducerer et nyt niveau i sig selv:en bladside bliver ikke en forælder for nye sider, som den ville være på et ikke-selvbalancerende træ.
I stedet laves en søskende til den delte side og den nye post (plus evt. nogle af posterne fra den gamle side) går til den nye side. En pegepind til den nye side tilføjes til forælderen.
Hvis den overordnede side også mangler plads (kan ikke acceptere markøren til den nyoprettede bladside), bliver den også delt, og så videre.
Disse opdelinger kan forplante sig op til rodsiden, hvis opdeling er det eneste, der øger indeksdybden (og gør det for alle sider på én gang).
Indekssider er desuden organiseret i dobbeltlinkede lister, hver liste på sit eget niveau. Dette ville være umuligt, hvis træet var ubalanceret.
Hvis master_id
er auto-inkrementeret betyder det, at alle opdelinger sker i slutningen (såkaldt 90/10
splits), hvilket gør det mest tætte indeks muligt.
Nej, det ville det ikke af ovenstående årsager.
Hvis du tilmelder dig slave
til master
ofte kan du overveje at oprette en CLUSTER
af de to tabeller, indekseret af master_id
. Det betyder, at posterne fra begge tabeller deler den samme master_id
, gå til de samme eller nærliggende datasider, hvilket gør en sammenføjning mellem dem meget hurtig.
Når motoren fandt en post fra master
, med et indeks eller hvad som helst, betyder det også, at den allerede har fundet posterne fra slave
at blive forbundet med den master
. Og omvendt, lokalisering af en slave
betyder også at lokalisere dens master
.