Oracle
Индексите на никога не са "небалансирани":всеки лист в индекса е на същата дълбочина като всеки друг лист.
Нито едно разделяне на страници не въвежда ново ниво само по себе си:листната страница не става родител за нови страници, както би било при несамобалансиращо се дърво.
Вместо това се прави брат или сестра за разделената страница и новият запис (плюс евентуално някои от записите от старата страница) отиват на новата страница. Към родителската се добавя указател към новата страница.
Ако родителската страница също е свършила (не може да приеме показалеца към новосъздадената крайна страница), тя също се разделя и т.н.
Тези разделяния могат да се разпространяват до основната страница, чието разделяне е единственото нещо, което увеличава дълбочината на индекса (и го прави за всички страници наведнъж).
Индексните страници са допълнително организирани в двойно свързани списъци, всеки списък на собствено ниво. Това би било невъзможно, ако дървото беше небалансирано.
Ако master_id
се увеличава автоматично, това означава, че всички разделяния се появяват в края (наричани 90/10
разделя), което прави възможно най-плътния индекс.
Не, не би, поради причините по-горе.
Ако се присъедините към slave
към master
често може да обмислите създаването на CLUSTER
от двете таблици, индексирани от master_id
. Това означава, че записите от двете таблици споделят един и същ master_id
, отидете на същата или близки страници с данни, което прави свързването между тях много бързо.
Когато машината намери запис от master
, с индекс или нещо друго, това също означава, че вече е намерил записите от slave
да се присъедини към този master
. И обратно, намиране на slave
също означава намиране на неговия master
.