Oracle
indeksy nigdy nie są „niezrównoważone”:każdy liść w indeksie jest na tej samej głębokości, co każdy inny liść.
Brak podziału strony sam w sobie nie wprowadza nowego poziomu:strona liścia nie staje się rodzicem dla nowych stron, tak jak byłaby na drzewie niesamowyrównującym się.
Zamiast tego tworzone jest rodzeństwo dla podzielonej strony, a nowy rekord (plus ewentualnie niektóre rekordy ze starej strony) trafiają na nową stronę. Wskaźnik do nowej strony zostanie dodany do rodzica.
Jeśli strona nadrzędna również nie ma miejsca (nie może zaakceptować wskaźnika do nowo utworzonej strony liścia), również zostanie podzielona i tak dalej.
Te podziały mogą rozprzestrzeniać się aż do strony głównej, której podział jest jedyną rzeczą, która zwiększa głębokość indeksu (i robi to dla wszystkich stron jednocześnie).
Strony indeksu są dodatkowo zorganizowane w podwójnie połączone listy, każda lista na swoim własnym poziomie. Byłoby to niemożliwe, gdyby drzewo było niezrównoważone.
Jeśli master_id
jest automatycznie zwiększana, oznacza to, że wszystkie podziały występują na końcu (tak zwane 90/10
dzieli), co zapewnia możliwie najgęstszy indeks.
Nie, nie będzie, z powyższych powodów.
Jeśli dołączysz do slave
do master
często możesz rozważyć utworzenie CLUSTER
z dwóch tabel, zindeksowanych przez master_id
. Oznacza to, że rekordy z obu tabel mają ten sam master_id
, przejdź do tych samych lub pobliskich stron danych, dzięki czemu łączenie się między nimi jest bardzo szybkie.
Gdy silnik znalazł rekord od master
, z indeksem lub czymkolwiek innym, oznacza to również, że znalazł już rekordy z slave
być połączonym z tym master
. I odwrotnie, lokalizując slave
oznacza również zlokalizowanie jego master
.