sql >> Databasteknik >  >> RDS >> Oracle

gör den inkrementerade kolumnen b-trädets index på kolumnen obalanserat?

Oracle s index är aldrig "obalanserade":varje blad i indexet är på samma djup som alla andra blad.

Ingen siddelning introducerar en ny nivå av sig själv:en bladsida blir inte en förälder för nya sidor som den skulle vara i ett icke-självbalanserande träd.

Istället görs ett syskon för den delade sidan och den nya posten (plus eventuellt några av posterna från den gamla sidan) går till den nya sidan. En pekare till den nya sidan läggs till för den överordnade.

Om den överordnade sidan har ont om utrymme också (kan inte acceptera pekaren till den nyskapade bladsidan), delas den också, och så vidare.

Dessa uppdelningar kan spridas upp till rotsidan, vars uppdelning är det enda som ökar indexdjupet (och gör det för alla sidor samtidigt).

Indexsidor är dessutom organiserade i dubbellänkade listor, varje lista på sin egen nivå. Detta skulle vara omöjligt om trädet var obalanserat.

Om master_id är automatiskt inkrementerad, vilket betyder att alla delningar sker i slutet (så kallade 90/10 splits) vilket gör det mest täta indexet möjligt.

Nej, det skulle det inte, av skälen ovan.

Om du går med i slave till master ofta kan du överväga att skapa ett CLUSTER av de två tabellerna, indexerade av master_id . Detta innebär att posterna från båda tabellerna delar samma master_id , gå till samma eller närliggande datasidor vilket gör en sammanfogning mellan dem mycket snabb.

När motorn hittade en post från master , med ett index eller vad som helst, betyder detta också att den redan har hittat posterna från slave förenas med den master . Och vice versa, att hitta en slave betyder också att lokalisera dess master .



  1. Dra de första X orden (inte bara tecken) från mySQL

  2. Hur man genererar ett datumintervall i SQL Server

  3. Bästa praxis för paginering i Oracle?

  4. Vilken typ av JOIN som ska användas