12.GYAKORLAT (ADATBÁZISOK)
Végrehajtási tervek
előállítása és megváltoztatása hintek
segítségével
--- --- --- ---
> Emlékeztető előző heti feladatok [Lásd 5.rész: Indexek] mindenkinél rendben?
Létrehoztunk a
tábláinkhoz különböző
indexeket, lásd create index
példák.txt
több oszlopos, csökkenő
sorrendű, függvény
alapú, fordított kulcsú
bitmap
index.
Majd megállapítottuk a különböző tulajdonságait
az alábbi
katalógusokból:
DBA_INDEXES,
DBA_IND_COLUMNS, DBA_IND_EXPRESSIONS
--- --- --- ---
> 1.rész: Végrehajtási tervek előállítása
Végrehajtási
tervek
szöveges
megjelenítése ("EXPLAIN
PLAN OUTPUT"-ból)
1.lépés:
Készítsük el az
utasítások végrehajtási
tervét:
EXPLAIN
PLAN FOR SELECT ... (ide írjuk be a SELECT utasítást)
2.lépés: A
végrehajtási tervek
megjelenítése a
dbms_xplan segítségével:
SELECT
plan_table_output FROM table(dbms_xplan.display);
Feladatok:
Lekérdezések
és
végrehajtási tervek az EMP,
DEPT,
SALGRADE táblák alapján
Három lépésben
végezzük el a végrehajtási
tervek előállítására a
feladatokat:
a.) 1.lépcső: Az
ORAUSER
felhasználó
EMP,DEPT
és SALGRADE
(fizetési kategóriák)
tábláiból hozzunk
létre saját példányokat,
lásd create_dept_no_constr.txt
Először kulcs
és
integritási
megszorítások nélkül hozzuk
létre a tábláinkat,
megszorítások
és indexek
nélkül
fogjuk használni a saját
tábláinkat, és
minél
változatosabb
és érdekesebb
lekérdezéseket (lásd javaslatok lentebb)
próbáljunk
ki a táblákon, miközben nézzük
meg a végrehajtási
terveket,
ezeket mentsük is el egyszerű .txt szövegfájlba.
b.) 2.lépcső: Hozzuk
létre a táblákat megszorításokkal, lásd create_dept_const.txt
és az előző
lekérdezéseket újból
futtatva nézzük meg a
végrehajtási
terveket.
c.) 3.lépcső: Ezután
hozzunk létre
olyan (különböző
típusú) indexeket
a táblákhoz,
amelyeket a fenti
lekérdezésekben használni
tud a
rendszer, majd
adjuk meg
a
fenti lekérdezésekhez a
rendszer által
létrehozott új
végrehajtási terveket
(most már az
indexek használatával). Figyeljük meg, hogy a megszorítások és
indexek
hozzáadásával milyen változások
történnek a
végrehajtási
terveken?
A fenti feladathoz adjunk meg különböző lekérdezéseket:
- A saját EMP,DEPT,SALGRADE táblákra vonatkozóan
adjunk meg lekérdezéseket
és a hozzájuk
tartozó
végrehajtási tervek fa
struktúráját.
Adjunk meg where
feltételeket, különböző
összekapcsolásokat
(például külső joint is), nézzük meg
az alkérdéseket (NOT IN
és NOT
EXISTS
is), korrelált
alkérdéseket,
csoportosítást,
halmaz- és multihalmaz műveleteket,
az inline
nézeteket tartalmazó
lekérdezéseket,
és állítsuk elő
(mentsük le szöveges fájlba) a
hozzájuk
tartozó végrehajtási terveket.
Például olyan lekérdezések, mint
a.) Adjuk meg a dolgozók adatait és
azt is, hogy milyen elnevezésű osztályon
dolgoznak, vagyis az EMP és
a DEPT
táblák (inner-join és left/right/outer-join is)
A joint fejezzük ki IN
(alkérdéssel), korrelált EXISTS (alkérdéssel) is (semi-join).
b.) Adjuk
meg azoknak az
osztályoknak a nevét
és telephelyét (LOC), amelyeknek
van olyan dolgozója, aki hivatalnok
(UPPER(JOB)=CLERK)
és a fizetése (SAL)
az
1-es fizetési
kategóriába esik (theta-join),
és
már legalább 20 éve
munkában áll.
c.) Adjuk meg azoknak az osztályoknak az
azonosítóját, nevét, az
osztályon dolgozók
átlagfizetését,
amely
osztályoknak nincs 3-as
fiz.kategóriájú dolgozója (anti-join).
Lásd még tervek.txt
--- --- --- ---
> 2.rész: Végrehajtási tervek
megváltoztatása hintek
segítségével
SELECT
/*+ tipp lista */ ... lekérdezés (hintekkel együtt)
Segédanyagok:
>> Oracle Database Performance Tuning
Guide => hintek.txt
a.) Vegyük rá az Oracle-t, hogy a
meglévő indexek alapján érje el
a
tábla sorait.
b.) Vegyük rá, hogy
az Oracle-t, hogy ne használja ezeket az indexeket.