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

gør øget kolonne b-træets indeks på kolonnen ubalanceret?

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 .



  1. PDO sqlsrv:kunne ikke finde driveren

  2. MYSQL:Ledige / besatte lokaler som nu

  3. Forøg ActiveModel ID Range til 8 byte

  4. Oracle :vælg maksimal værdi fra forskellige kolonner i samme række