INDEXEK az adatbázisokban
Már a korábbi programozási tanulmányaitokban is megismerhettétek, hogy a nagy adathalmazokban való keresésnek a hatékonysága a keresési módszerektől függően változik, gyakran egész drasztikusan.
Lineáris keresés - Ha egy rendezetlen tömbben keresünk, akkor egy N elemű tömbben a programoknak átlagosan N / 2 összehasonlítást kell végezni, hogy a keresett értéket megtalálják. 1 millió adat esetén ez 500 000 összehasonlítás.
Bináris keresés - Ha az adatok rendezettek, akkor ugyanekkora adathalmazon a keresések száma LOG2 N, azaz 1 millió adat esetén kb.10 (!!!) összehasonlítás.
A fenti különbség az adatok mennyiségének növelésével persze egyre nagyobb.
Az adatbázis-kezelő rendszerekben erre szolgálnak az indexek. Amikor egy táblát indexelünk valamelyik mező vagy mezők szerint, akkor az eredeti adatokhoz plusz információt teszünk hozzá. Egy új rekord felvitelekor akkor az adatbázis kezelő beleteszi azt a plusz információt, amely alapján az adott mező szerint tud majd binárisan keresni. Ez a plusz információ növeli a tábla méretet, de a kereséseket nagyságrendileg gyorsítja.
Indexek létrehozása
A táblákhoz indexeket is rendelhetünk, melyek helyes megválasztása esetén a lekérdezések felgyorsíthatók. Az indexek létrehozására a következő utasítás szolgál:
CREATE [UNIQUE] INDEX index_név ON tabla (mezőnév, mezőnév, ...);
Az index létrehozásánál a UNIQUE módosító megadásával a reláció valamennyi sorában különbözőnek kell lennie az index kulcsnak. Általában a tábla kulcsok esetén használható csak (index kulcs = tábla kulcs).
Hozzunk létre egy indexet a Diákok tábla DID mezője alapján:
CREATE UNIQUE INDEX Diak ON Diakok (DID);
A parancsban megadott UNIQUE következtében a reláció minden sorában különböző DID kell szerepelnie, illetve már létező érték bevitele hibát eredményez. Ez tulajdonképpen a célunk is, mert ez a tábla kulcsa . Az index létrehozása után ugyanaz a DID nem vihető be mégegyszer, ilyen esetben hibaüzenetet kapunk.
Az indexek megszüntetése
DROP INDEX index_név ON táblanév
parancs segítségével történhet.
Ezen a két parancson kívül nincs több az indexek kezelésére. A táblákhoz kapcsolódó indexek használatáról az adatbázis-kezelő optimalizáló algoritmusa dönt. Az indexeket létrehozásuktól a megszüntetésükig az adatbázis-kezelő automatikusan frissíti, a módosításoknak megfelelően.
Megjegyzés:
Az indexek számának növelésével a relációkon végrehajtott módosítások, törlések végrehajtási ideje növekszik.