Bevezetés a költség alapú tervválasztásba II.
Végrehajtási tervek 
megváltoztatására hintek segítségével  
valamint
statisztikák létrehozásával és törlésével
_______________________________________________________________ 
Segédanyagok:
>> Oracle Doc. - Performance Tuning Guide HTML   PDF  és itt 13-19. fejezetek,
      lásd 16. fejezet: Hintek használata:  16. Using Optimizer Hints   [hintsref.htm]
      lásd 14. fejezet: Statisztikák kezelése: 14. Managing Optimizer Statistics  [stats.htm]
>> Nikovits Tibor:  hintek.txt  és tervek2.txt  és tervek3.txt 
_______________________________________________________________
A zh és beküldendő feladatoknál egy szöveges állományba bemásolva beküldendő: 
   1.) SELECT  /*+ tipp lista */ ...  vagyis a lekérdezés (hintekkel együtt),
   2.) lekérdezés outputja (ha az eredménytábla nagy, akkor annak az első 5 sora),  
   3.) végrehajtási tervek fastruktúrájának szöveges megjelenítése (lásd 8.gyak#elok)
   - 1.lépés: Készítsük el az utasítások végrehajtási tervét a a PLAN_TABLE táblába:
           EXPLAIN PLAN FOR SELECT ... 
   - 2.lépés: A végrehajtási tervek megjelenítése a dbms_xplan package segítségével: 
         SELECT plan_table_output FROM table(dbms_xplan.display);
_______________________________________________________________
Végrehajtási tervek megváltoztatása hintek (tipp lista) segítségével
 
2.1.feladat: -- 8.gyak. 2.feladatának a folytatása
Lekérdezések és végrehajtási tervek (megváltoztatása hintek segítségével)
NIKOVITS.CIKK, SZALLITO, PROJEKT, SZALLIT táblái alapján
   
- A lekérdezésekhez NIKOVITS felhasználó tulajdonában levő táblákat használjuk: 
  CIKK(ckod, cnev, szin, suly)
  SZALLITO(szkod, sznev, statusz, telephely)
  PROJEKT(pkod, pnev, helyszin)
  SZALLIT(szkod, ckod, pkod, mennyiseg, datum)

- Vagyis most ne hozzunk létre saját példányokat, hanem egy adott séma tábláit
   használjuk a lekérdezéseknél, a táblák elérése: NIKOVITS.<táblanév>
- A táblákhoz különböző indexek is vannak létrehozva, ezek tulajdonságait
   a katalógusokból (dba_nézetekből) nézhetjük meg, amikor szükségünk van rá.

NIKOVITS felhasználó tulajdonában levő táblákra adjuk meg a következő
   lekérdezéseket és a hozzá tartozó végrehajtási tervet  (mentsük le szövegfájlba).
   Minden esetben lehet hinteket használni. Lásd hintek.txt 

- Adjuk meg a piros cikkekre vonatkozó szállitások összmennyiségét.
   a) Adjuk meg úgy a lekérdezést, hogy egyik táblára se használjon indexet az oracle.
   b) Adjuk meg úgy a lekérdezést, hogy csak az egyik táblára használjon indexet az oracle.
   c) Adjuk meg úgy a lekérdezést, hogy mindkét táblára használjon indexet az oracle.
   d) Adjuk meg úgy a lekérdezést, hogy a két táblát SORT-MERGE módszerrel kapcsolja össze.
   e) Adjuk meg úgy a lekérdezést, hogy a két táblát NESTED-LOOPS módszerrel kapcsolja össze.
   f) Adjuk meg úgy a lekérdezést, hogy a két táblát NESTED-LOOPS módszerrel kapcsolja össze,
      és ne használjon indexet.
 
2.2.feladat:
- Adjuk meg a Pecs-i telephelyű szállítók által szállított piros cikkek összmennyiségét.
   a) Adjuk meg úgy a lekérdezést, hogy a szallit táblát először a cikk táblával join-olja az oracle.
   b) Adjuk meg úgy a lekérdezést, hogy a szallit táblát először a szallito táblával join-olja az oracle.
   
2.3.feladat:
- Adjuk meg azon szállítások összmennyiségét, ahol ckod=1 és szkod=2.
   a) Adjuk meg úgy a lekérdezést, hogy ne használjon indexet.
   b) A végrehajtási tervben két indexet használjon, és képezze a sorazonosítók metszetét
       (AND-EQUAL).
   
2.4.feladat:
- Adjuk meg azon szállítások összmennyiségét, ahol ckod=1 vagy szkod=2.
   a) Adjuk meg úgy a lekérdezést, hogy ne használjon indexet.
   b) A végrehajtási tervben két indexet használjon, és képezze a kapott sorok unióját
       (CONCATENATION).
 
- Lásd még a tervek2.txt és a tervek3.txt feladatait!
______________________________________________________________
Végrehajtási tervek megváltoztatása statisztikák létrehozásával és törlésével
 
3.1.feladat: (Papíron oldjuk meg!)
   - Hozzunk létre 5 intervallumos magasság alapú hisztogramot az alábbi eloszlású
     adatokra vonatkozóan, vagyis adjuk meg az egyes intervallumok végpontjait.
     1-100 (3), 101-300 (2), 301-500 (1), 501-600 (3)
     (Az előfordulások száma zárójelben szerepel, pl. 1-100 (3) azt jelenti, hogy
     1 és 100 között minden érték háromszor fordul elő, vagyis 1 és 100 között
     300 előfordulás van. Ezek szerint a táblának összesen hány sora is van?) 

3.2.feladat: (Papíron oldjuk meg!)
   - Hozzunk létre 5 intervallumos szélesség (gyakoriság) alapú hisztogramot is
     ugyanezekre az adatokra.
     1-100 (3), 101-300 (2), 301-500 (1), 501-600 (3)

3.3.feladat:
   - Hozzatok létre egy saját példányt a nikovits.szallit táblából és indexet a datum oszlopra,
     majd adjatok meg egy olyan lekérdezést, amelyik egy általatok választott napra vonatkozóan
     a szállítások összmennyiségét adja meg. Statisztikák létrehozásával illetve törlésével
     (lásd tervek3.txt) érjétek el (hint használata nélkül), hogy az Oracle egyszer használjon
     indexet, máskor pedig (hisztogram létrehozása vagy törlése után) ne használjon.
_______________________________________________________________
Kötelező házi feladat:
Kérem, hogy a mai gyakorlat lekérdezéseit és végrehajtási terveit a mai óra végén
vagy legkésőbb a következő gyakorlatig  küldje be emailben "<ehakod>_9gy.txt"
nevű szöveges fájlban (ahol az <ehakod> helyére a saját ETR azonosító kerüljön).
 
 Vissza az AB2 gyakorlat oldalára             Vissza a Kezdőlapra