Adatbázis-indexek és B-tree
Mi az adatbázis-index, mikor gyorsít, mi az ára íráskor, és miért nem kell minden oszlopra indexet tenni?
Röviden
Az index külön adatstruktúra, amely bizonyos keresési és rendezési mintákat gyorsíthat azzal, hogy nem kell minden sort végigolvasni. PostgreSQL-ben a B-tree az alapértelmezett általános indexfajta, de más típusok is léteznek speciális feladatokra.
Mit jelent a adatbázis-indexek és b-tree?
Az index külön adatstruktúra, amely bizonyos keresési és rendezési mintákat gyorsíthat azzal, hogy nem kell minden sort végigolvasni. PostgreSQL-ben a B-tree az alapértelmezett általános indexfajta, de más típusok is léteznek speciális feladatokra.
Scan vs index – nagyságrendi szemléltetés
Táblasorok: 100 000
Teljes scan – szemléltetés
~100 000
megvizsgálható sor nagyságrendje
B-tree keresés – szemléltetés
~17
összehasonlítás nagyságrendje ideális esetben
A valós PostgreSQL query planner költségmodell alapján dönt; az index nem minden lekérdezésnél gyorsabb.
Hogyan működik a gyakorlatban?
A query planner statisztika és költségmodell alapján dönthet index scan, sequential scan vagy más terv mellett. Kis táblán vagy alacsony szelektivitásnál a teljes scan olcsóbb lehet, ezért az, hogy van index, nem jelenti, hogy mindig használni fogja.
- Index gyorsíthat readet, de helyet foglal és íráskor karbantartási költsége van.
- Composite indexnél az oszlopsorrend számít a használhatósághoz.
- Partial index csak bizonyos sorokra épülhet.
- EXPLAIN/EXPLAIN ANALYZE mutatja a választott tervet és futási részleteket.
Gyakorlati fejlesztői szemlélet
Indexet konkrét lassú query és hozzáférési minta alapján tervezz. Előbb mérd a query tervet és a visszaadott sorok arányát, utána add hozzá a minimálisan szükséges indexet.
Gyakori hibák és félreértések
- Minden WHERE-oszlopra automatikusan indexet tenni.
- Index meglétéből következtetni a használatára.
- Felesleges, egymást átfedő indexek írási költségét figyelmen kívül hagyni.
Források és szabványok
A technikai részletekhez elsődleges szabványokat és karbantartott hivatalos dokumentációt használok. Frameworkök, böngészők és webes API-k idővel változhatnak, ezért implementálás előtt mindig ellenőrizd az aktuális dokumentációt is.
Kapcsolódó ByBence Academy