HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Index létrehozása PL/SQL-ben


Oracle adatbázis-kezelés 12. rész

Példaprogram letöltése

5882 bájt

A relációs adatbázisok elvének megfelelően az Oracle-rendszer is lehetővé teszi, hogy indexeket hozzunk létre egy adattábla bizonyos oszlopaira. Cikksorozatunk mai számában bemutatjuk, hogyan lehet ezt megtenni a PL/SQL nyelv segítségével, bemutatva az SQL-parancs általános szintaxisát. A cikk mellékletében közölt példaprogramban kiderítjük, hogy időben mekkora a különbség két SQL-lekérdezés között indexszel rendelkező, illetve nem rendelkező, tartalmukban azonos táblák esetében.

A példaprogram használata előtt létre kell hozni egy SOUSER sémát az Oracle adatbázis-rendszerünkben, és fel kell ruházni DBA jogosultsággal. A sémába bejelentkezve le kell futtatni a mellékelt Oracle12.sql nevű parancsállományt a hivatkozott további objektumok létrehozásához.
Ahogy más adatbáziskezelő rendszerekben, az Oracle rendszerben is van lehetőségünk bizonyos keresések hatékonyságát az adott táblában deklarált indexekkel növelni. Az indexek használatának vannak bizonyos előnyei, melyek miatt nagy rekordszámú táblákban elengedhetetlen a használatuk:
  • az oszlopok végigpásztázásának felgyorsítása
  • oszlopok egyediségének kikényszerítése
  • sorok bizonyos sorrendben való megjelenítése.
Az Oracle rendszer – hacsak nem utasítjuk az ellenkezőjére az index elkészítésekor – B-fa indexekkel dolgozik. A B-fa index kifejezés arra utal, hogy milyen matematikai elven tárolódik az információ, és ezt milyen módszerrel pásztázza végéig az utasítás feldolgozó.
A B-fa elvet úgy érthetjük meg, ha elképzelünk egy fa-struktúrát, ahol a gyökérblokk (root) elágazik, és minden ágnak vannak elágazásai. Ezek az ágblokkok (decision node). A fa-szerkezet legmélyebb pontján olyan elemek vannak, melyek már nem ágaznak tovább, ők a levélblokkok (leaf). Minden objektum egy bizonyos körét tartalmazza a táblában lévő adatoknak, a gyökérblokk tartalmaz egy mutatót az összes, belőle elágazó objektum adatcsoportjára. A kereséskor a gyökérblokk meghatározza, hogy mely elágazásában található a keresett információ. Az elágazó objektum szintén rendelkezik mutatókkal a belőle ágazó objektumok adathalmazaira. A keresőmotor addig halad lefelé a levelekig, amíg meg nem találja a keresett információt.
Az Oracle 7-es verziójától kezdődően úgynevezett költség alapú optimalizálót építettek az alkalmazásba. Ennek lényege, hogy kereséskor a feldolgozó a rendelkezésre álló, időközönként frissítendő rendszerstatisztikákat is figyelembe veszi, a legkisebb költségráfordítás alapján működik (IO műveletek száma, blokkok száma).
Az ilyen statisztikák elkészítésére a rendszer az ANALYSE parancs kiadásával manuálisan is kényszeríthető.
A PL/SQL-ben a következő szintaxissal lehet indexeket létrehozni:
CREATE [{UNIQUE | BITMAP}] INDEX <index neve>
ON {táblanév (oszlop [ASC | DESC], oszlop [ASC | DESC])}
Az indexek létrehozásához a tábla tulajdonosának kell lennünk, rendelkeznünk kell a táblára vonatkozó INDEX privilégiummal, vagy a CREATE ANY INDEX rendszerprivilégiummal.
A UNIQUE kulcsszó jelzi, hogy az oszlopnak (vagy oszlop kombinációnak), mellyel a tábla indexelése történik, egyedinek kell lennie.
A BITMAP kulcsszóval jelezhetjük a feldolgozónak, hogy B-fa index helyett BITMAP-indexet készítsen.
Az ASC, és DESC kulcsszavak csak a DB2 rendszerrel való kompatibilitás céljából maradtak meg, az index létrehozása mindig növekvő sorrendben történik.
A mellékelt példában, az Oracle12.sql parancsállomány lefuttatása után két tábla került az adatbázis SOUSER sémájába. A két tábla azonos szerkezettel és tartalommal rendelkezik. A táblák feltöltése a program indítása után történik a ’Feltöltés’ gombra kattintva. Amennyiben a program indításakor a táblák már rendelkeznek a szükséges rekordszámmal, akkor a feltöltés nyomógombja nem használható.
A táblák között csak az a különbség, hogy a Table1 táblára egy indexet deklaráltunk, mely a három oszlopát tartalmazza. A Table2 tábla nem rendelkezik indexszel. Az index létrehozása a következőképpen történt:
CREATE INDEX sample_index ON Table1(COL1,COL2,COL3)
A műveleti gombra kattintva két API metódus segítségével megmérhetjük, hogy melyik esetben gyorsabb a keresés az adott táblában. A mérést több esetben végezzük el egy folyamatban, ennek értéke kiválasztható a ComboBox kontrolban. A mérések átlagát számítva kideríthető, hogy melyik keresés volt a gyorsabb. A keresés időtartama másodpercben jelenik meg a szerkesztőmezőkben.
A felhasznált metódusok a QueryPerformanceCounter, és a QueryPerformanceFrequency. A keresés a következő SQL-utasítás volt, melyet a TADOCommand objektum CommandText property-jében megadtunk:
DM.command.CommandText := 'SELECT SUM(COL2) FROM ' + tblList[j] + ' WHERE (COL3 > ' + IntToStr(i) + ')';
A méréseket tucatszor elvégezve az volt tapasztalható, hogy a Table1 tábla esetén kaptuk meg a leggyorsabban a megadott SELECT utasítás eredményét. Az eredmények azt tükrözték, hogy az index deklarálásával és használatával az eredmények kétszerte gyorsabban állnak rendelkezésre, mint index használata nélkül.

Cikksorozat

#IDKategóriaCikk címeSorozat
2535C#Oracle adatbázis-elérés alapjai1. rész
2546C#SQL utasítások végrehajtása2. rész
2557C#Tárolt eljárások és függvények fejlesztése3. rész
2565C#Csomagok fejlesztése4. rész
2573C#Adatbázis triggerek fejlesztése5. rész
2581C#Kivételek kezelése PL/SQL-ben6. rész
3276C#Kurzorok deklarálása PL/SQL-ben7. rész
3297C#Tömb adattípus létrehozása és kezelése PL/SQL-ben8. rész
3326C#Adatbevitel tömb-adattípussal rendelkező oszlopokba9. rész
3357C#Adattárolás beágyazott tábla-típusú oszlopokban10. rész
3388C#Adatok beszúrása beágyazott táblákba11. rész
3418C#Index létrehozása PL/SQL-ben12. rész
3444C#Szekvenciák használata13. rész
3488C#Adatok betöltése állományokból14. rész
1765DelphiOracle adatbázis-elérés alapjai15. rész
1774DelphiSQL utasítások végrehajtása16. rész
1784DelphiTárolt eljárások és függvények fejlesztése17. rész
1794DelphiCsomagok fejlesztése18. rész
1803DelphiAdatbázis triggerek fejlesztése19. rész
1815DelphiKivételek kezelése PL/SQL-ben20. rész
3256DelphiKurzorok deklarálása PL/SQL-ben21. rész
3287DelphiTömb adattípus létrehozása és kezelése PL/SQL-ben22. rész
3318DelphiAdatbevitel tömb-adattípussal rendelkező oszlopokba23. rész
3348DelphiAdattárolás beágyazott tábla típusú oszlopokban24. rész
3377DelphiAdatok beszúrása beágyazott táblákba25. rész
3408DelphiIndex létrehozása PL/SQL-ben26. rész
3436DelphiSzekvenciák használata27. rész
3467DelphiAdatok betöltése állományokból28. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 95. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |