sql >> Databáze >  >> RDS >> Oracle

způsobí inkrementovaný sloupec index b-stromu ve sloupci nevyvážený?

Oracle Indexy 's nejsou nikdy "nevyvážené":každý list v indexu je ve stejné hloubce jako kterýkoli jiný list.

Žádné rozdělení stránky samo o sobě nezavádí novou úroveň:listová stránka se nestane rodičem pro nové stránky, jako by tomu bylo u stromu, který se nevyrovnává.

Místo toho se vytvoří sourozenec pro rozdělenou stránku a nový záznam (plus možná některé záznamy ze staré stránky) přejde na novou stránku. Do nadřazené stránky se přidá ukazatel na novou stránku.

Pokud nadřazená stránka také nemá místo (nemůže přijmout ukazatel na nově vytvořenou listovou stránku), rozdělí se také a tak dále.

Tato rozdělení se mohou šířit až ke kořenové stránce, jejíž rozdělení je jediná věc, která zvyšuje hloubku indexu (a dělá to pro všechny stránky najednou).

Indexové stránky jsou navíc organizovány do dvojitě propojených seznamů, každý seznam na své vlastní úrovni. To by nebylo možné, pokud by strom nebyl vyvážený.

Pokud master_id je automaticky inkrementováno, to znamená, že všechna rozdělení nastanou na konci (např. 90/10 splits), což umožňuje nejhustší index.

Ne, nebylo by to z výše uvedených důvodů.

Pokud se připojíte k slave master často můžete zvážit vytvoření CLUSTER ze dvou tabulek, indexovaných pomocí master_id . To znamená, že záznamy z obou tabulek sdílejí stejné master_id , přejděte na stejné nebo blízké datové stránky, díky čemuž je spojení mezi nimi velmi rychlé.

Když motor našel záznam z master , s indexem nebo čímkoli, to také znamená, že již našel záznamy z slave být spojen s tímto master . A naopak, vyhledání slave také znamená umístění jeho master .



  1. Nalezení nejbližší číselné shody v databázi s tím, co uživatel zadal do php

  2. SQLAlchemy Core - generování PostgreSQL výrazu SUBSTRING?

  3. Vytvoření rozšíření Postgresql se nezdařilo

  4. Komplexní příkaz IF se 3 tabulkami