11.GYAKORLAT (INFORMÁCIÓS RENDSZEREK)
 
  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.