B+ puu indeksi visualiseerija

Mis on B+ puu indeks?

B+ puu on andmestruktuur, mida andmebaasisüsteemid laialdaselt kasutavad indeksite loomiseks. Indeksid kiirendavad oluliselt andmete otsimist suurtest tabelitest. Ilma indeksita peaks andmebaas rea leidmiseks läbi vaatama kogu tabeli (Full Table Scan), mis on väga aeganõudev.

B+ puu on tasakaalustatud puu, mis tähendab, et tee juursõlmest mistahes lehesõlmeni on alati sama pikkusega. See tagab stabiilse ja kiire otsinguaja. Puu koosneb juursõlmest, vahesõlmedest ja lehesõlmedest.

  • Vahesõlmed (Internal Nodes): Sisaldavad ainult võtmeid ja viitasid alampuudele. Need juhivad otsingut õige lehesõlme suunas.
  • Lehesõlmed (Leaf Nodes): Sisaldavad indekseeritud veeru väärtuseid (võtmeid) ja viitasid tegelikele andmeridadele tabelis. Kõik lehesõlmed on omavahel seotud kahesuunalise ahellisti abil, mis teeb vahemikupäringud (nt WHERE ID BETWEEN 10 AND 20) väga efektiivseks.

Näite skeem ja andmed

Selles näites kasutame kahte tabelit: Tellimus ja Tellimuse_rida. Mõlema tabeli primaarvõtmele luuakse automaatselt B+ puu indeks.

CREATE TABLE Tellimus (
    tellimus_id INTEGER GENERATED ALWAYS AS IDENTITY,
    klient_kood INTEGER NOT NULL,
    tellimuse_seisundi_liik_kood SMALLINT NOT NULL DEFAULT 1,
    CONSTRAINT pk_tellimus PRIMARY KEY (tellimus_id)
);

CREATE TABLE Tellimuse_rida (
    tellimus_id INTEGER NOT NULL,
    kaup_kood VARCHAR(10) NOT NULL,
    kogus SMALLINT NOT NULL,
    CONSTRAINT pk_tellimuse_rida PRIMARY KEY (tellimus_id, kaup_kood),
    CONSTRAINT fk_tellimuse_rida_tellimus FOREIGN KEY (tellimus_id)
        REFERENCES Tellimus (tellimus_id) ON DELETE CASCADE
);

Interaktiivne demonstratsioon

Vali päringu tüüp ja sisesta väärtused, et näha, kuidas andmebaas andmeid loeb.

SELECT * FROM Tellimus WHERE tellimus_id =
SELECT * FROM Tellimus WHERE tellimus_id BETWEEN AND
SELECT * FROM Tellimus WHERE tellimus_id <>
... FROM Tellimus JOIN Tellimuse_rida ... WHERE tellimus_id =
SELECT kaup_kood FROM Tellimuse_rida WHERE tellimus_id =
See päring loeb andmed otse pk_tellimuse_rida indeksist, ilma tabeliplokke puutumata.

Päringu käivitamise logi

Vajuta "Käivita päring" nuppu, et näha, kuidas andmebaas andmeid loeb.

Päringu tulemus

Tellimus tabel ja pk_tellimus indeks

Tellimuse_rida tabel ja pk_tellimuse_rida indeks