V.Témakör: Lekérdezések optimalizálása

5.gyak.
>> ism. IV. Témakör 8B. Feladatok IOT-re és a  kötelező 5HF
>> Előzmények. Ismétlő ellenőrző kérdések
>> 5.1. Feladatok indexstruktúrák használatával
>> 5.2. Feladatok a kiterjesztett relációs algebrai műveletekkel
>> 5.3. Feladatok heurisztikán alapuló algebrai optimalizálásra

6.gyak.
>> ism. IV. Témakör 4.8C. Feladatok klaszterekre és az 6HF+ 
>> ism. IV. Témakör 4.8D. Feladatok partíciókra
>> 5.4. Feladatok lekérdezések végrehajtási algoritmusaira és költségbecslésekre 

7.gyak.
>> I.ZH  AB szakirány (IP-abATM) illetve C szakirány (IP-cAMÜ)

8-9.gyak.
>> 5.5. Feladatok végrehajtási tervek előállítására és megváltoztatására tippek segítségével
>> 5.6. Végrehajtási tervek megváltoztatása statisztikák létrehozásával és törlésével
>> 5.7. SQL utasítás rekonstruálása a végrehajtási terv alapján és a KÖTELEZŐ 7HF
_______________________________________________________
5. gyak. (2008.X.7/X.9)
 - Lekérdezések optimalizálása

Az indexek felépítése és szerkezete. A B-fa index levél és nem levél csúcsok
szerkezete. A Bitmap index szerkezete. B-fa és Bitmap indexek készítése papíron.
Bitvektorok tömörítése szakaszhossz kódolással. Indexek létrehozása Oracle-ben.
Különböző logikai műveletek elvégzése bitmap indexek segítségével.
Lekérdezések megadása kiterjesztett relációs algebrai műveletekkel.
Kifejezésfák felrajzolása. Heurisztikus szabályokon alapuló algebrai optimalizálás.
Az eddigi fogalmak átismétlése, ismétlő kérdések, elmaradt feladatok pótlása.

>> ism. IV. Témakör 4.8B. Feladatok IOT táblákra és a  kötelező 5HF
>> Előzmények. Ismétlő ellenőrző kérdések
>> 5.1. Feladatok indexstruktúrák használatával
>> 5.2. Feladatok a kiterjesztett relációs algebrai műveletekkel
>> 5.3. Feladatok heurisztikán alapuló algebrai optimalizálásra

Előzmények. Ismétlő ellenőrző kérdések

IV./7. Előadáshoz kapcsolódó elméleti feladatok feladatsor folytatása,
további feladatokat lásd még az alábbi "zöld könyvben":
Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása, 2001.

50ea_01
   - Milyen típusú állományokból áll egy Oracle adatbázis?
      Melyiket mire használja a rendszer?

50ea_02
   - Mi a különbség a következő 3 adatszótár tartalmában? Melyik miket tartalmaz?
     DBA_TABLES, ALL_TABLES, USER_TABLES

50ea_03
   - Mire való a szekvencia? Milyen módon lehet használni SQL utasításból?
     Írjon le 2-3 SQL utasítást, amelyek egy SEQV1 nevű szekvenciát használnak.

50ea_04
   -  Milyen kapcsolatban vannak egymással az alábbi adattárolással kapcsolatos
       fogalmak? Táblatér, Szegmens, Adatfájl

50ea_05
   - Az alábbi objektumok közül melyik hány adatszegmenssel rendelkezhet?
     nem partícionált tábla, szekvencia, index-szervezett tábla, nézet, cluster,
     partícionált tábla, trigger, package, nem partícionált index, partícionált index
     Lehetséges válaszok:
     a: -> 0; b: -> 1; c: -> 1 vagy 2; d: -> 1 vagy több; e: -> 2 vagy több;

50ea_06
   - Mi a különbség a ritka és a sűrű index között?
     Az elsődleges illetve másodlagos indexek ritkák vagy sűrűk lehetnek?

50ea_07
   - Az Oracle által készített indexek ritkák vagy sűrűk?
      Milyen információkat tartalmaz a sorazonosító (ROWID) az Oracle-ben?

5.1. Feladatok indexstruktúrák használatával

Feladatok - Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása
                    a "zöld könyv" 4.1, 4.2, 4.3, 4.4 és 5.4 fejezetei alapján
A fogalmakhoz jól használható Oracle dokumentáció: "Concepts"  HTML  PDF
                    ebben Part II. Oracle Database Architecture - 5. Schema Objects
                   
51ind_01 - B-fa
   - Az alábbi táblára készítsen B-fa indexet a dolgozó tábla DKOD oszlopára.
      Tegyük fel, hogy egy blokkba 3 bejegyzés fér el. Rajzolja fel (kézzel) a fát.

DKOD DNEV   FIZETES  FOGLALKOZAS  BELEPES  OAZON
---------------------------------------------------
1    SMITH     800   CLERK        1980     20  
2    ALLEN    1600   SALESMAN     1981     30      
3    WARD     1250   SALESMAN     1981     30      
4    JONES    2975   MANAGER      1981     20      
5    MARTIN   1250   SALESMAN     1981     30      
6    BLAKE    2850   MANAGER      1981     30      
7    CLARK    2450   MANAGER      1981     10      
8    SCOTT    3000   ANALYST      1982     20      
9    KING     5000   PRESIDENT    1981     10      
10   TURNER   1500   SALESMAN     1981     30      
11   ADAMS    1100   CLERK        1983     20      
12   JAMES     950   CLERK        1981     30      
13   FORD     3000   ANALYST      1981     20      
14   MILLER   1300   CLERK        1982     10     

51ind_02 - B-fa
   - Adott fába beszúrás, törlés is várható feladat a zh-ban...

51ind_03 - Bitmap
   - Tegyük fel, hogy fenti táblához a FOGLALKOZAS, a BELEPES és az OAZON
     oszlopokra létezik bitmap index (3 index). Készítsük el az alábbi lekérdezésekhez
     szükséges bitvektorokat, majd végezzük el rajtuk a szükséges műveleteket, és
     adjuk meg azt az előállt bitvektort, ami alapján a végeredmény sorok megkaphatók.
     Ellenőrzésképpen adjuk meg a lekérdezést SQL-ben is!
 
a. ) Adjuk meg azoknak a dolgozóknak a nevét, akik 1981-ben léptek be és a foglalkozásuk
      hivatalnok (CLERK), vagy a 20-as osztályon dolgoznak és a foglalkozásuk MANAGER.

b.) Adjuk meg azoknak a dolgozóknak a nevét, akik nem 1981-ben léptek be és a 10-es
     vagy a 30-as osztályon dolgoznak.

51ind_04 - Bitmap
   - Tömörítse az előző feladatban kapott bitvektorokat a szakaszhossz kódolással.

51ea_05 - Bitmap
   - Fejtsük vissza a következő, szakaszhossz kódolással tömörített bitvektort:
     11101101001011

51ea_06 - Hash
   - Mutassuk meg, hogy mi történik az alábbi ábra kosaraival a következő beszúrások
     és törlések bekövetkeztével
          
     0   d                              
             
     1   e    
     c    
     2    b    
             
     3   a    
     f    
    
    a.) A g, h, i, j rekordok beszúrása sorban a 0, 1, 2, 3 kosarakba
    b.) Az a és b rekordok törlése
    c.) A k, l, m, n rekordok beszúrása sorban a 0, 1, 2, 3 kosarakba
    d.) A c és d rekordok törlése

5.2. Feladatok a kiterjesztett relációs algebrai műveletekkel

Feladatok - Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása
                    a "zöld könyv" 6.1 fejezete alapján
Segédlet:(Nikovits Tibor EA-ból) Lekerdezes.pdf  (.doc)

Az alábbi lekérdezéseket fejezzük ki SQL SELECT-tel, majd írjuk át a lekérdezést
kiterjesztett relációs algebrai operátorokat felhasználó kifejezéssé, majd rajzoljuk fel
a kifejezésfát is.

52alg_1
   - Adjuk meg osztályonként az osztály nevét és az ott dolgozók számát
     a dolgozók száma szerint növekvő sorrendben.

52alg_2
   - Adjuk meg azoknak az osztályoknak a nevét, ahol az átlagfizetés nagyobb mint 2000.

52alg_3
   - Adjuk meg azoknak a foglalkozásoknak a nevét, amelyek a 10-es és 20-as
     osztályon is  előfordulnak. Ismétlődések ne legyenek a végeredményben.

5.3. Feladatok heurisztikán alapuló algebrai optimalizálásra

Feladatok - Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása
                    a "zöld könyv" 7.2 és 7.3 fejezetei alapján
Segédlet:(Nikovits Tibor EA-ból) rAlgOpt.pdf (.rtf)

53opt_1
   - Hozzunk létre a DEPT, EMP, SALGRADE táblákból a saját táblákat.
     Relációsémák:      
     OSZTALY(OAZON, ONEV, HELY)
     DOLGOZO(DKOD, DNEV, FIZETES, FOGLALK, BELEPES, OAZON)
     FIZKAT(KATEGORIA, ALSO, FELSO)
   - Fejezzük ki SQL SELECT-tel (alkérdések illetve nézetek használata nélkül) és
      projekció-szelekció-direktszorzat alakú kiindulási relációs algebrai kifejezéssel,
      hogy kik azok a dolgozók (mi a nevük), akik tanárok, a fizetésük a 2-es
      kategóriába esik és valamelyik ’Debrecen’ helyszínű osztályon dolgoznak.
   - Rajzoljuk fel a relációs algebrai kifejezést reprezentáló lekérdezőfát, majd
     alakítsuk át hatékonyabb relációs algebrai kifejezést reprezentáló lekérdezőfává,
     vagyis végezzük el a heurisztikus szabályokon alapuló algebrai optimalizálást!
   - Milyen relációs algebrai azonosságokat használtunk fel az egyes lépéseknél?

_______________________________________________________
6. gyak. (
2008.X.14/16)  - Lekérdezések optimalizálása

ZH előtti utolsó gyakorlat! Előzetes ZH infók megbeszélése, mi várható?
Az eddigi fogalmak átismétlése, ismétlő kérdések, elmaradt feladatok pótlása.
Ami még a ZH-ban várható: Join műveletek algoritmusai és azok költségei.
Hash alapú (Hash-Join), rendezés alapú (Sort-Merge), beágyazott ciklus 
(Nested Loop) algoritmusok. A költségek kiszámolása konkrét példák esetén.

>> ism. IV. Témakör 4.8C. Feladatok klaszterekre és az 6HF+ 
>> ism. IV. Témakör 4.8D. Feladatok partíciókra
>> 5.4. Feladatok lekérdezések végrehajtási algoritmusaira és költségbecslésekre 

5.4. Feladatok lekérdezések végrehajtási algoritmusaira
    és a műveletek költségbecslésére

Feladatok - Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása
                    a "zöld könyv" 6.3-6.7 és 7.4-7.6. fejezetei alapján
Segédlet: VegrKolts.pdf  (.doc)

54opt_1
   - Tegyük fel, hogy a dolgozó tábla 14 sorból áll és sorai egyenként 1 blokkot
     foglalnak el, és a memóriánk 4 blokknyi.
     Rendezzük a tábla sorait fizetés szerint egy rendezés alapú algoritmussal.
     Adjuk meg az első menet után a rendezett részlistákat (elég a dnev, fizetes).
     Hány menetes algoritmusra lesz szükségünk?

54opt_2
   - Tegyük most fel, hogy a memóriánk 6 blokknyi és van még egy vásárlás tábla,
     aminek a szerkezete a következő: VASARLAS(dkod, cikk, mennyiseg, ar).
     Ennek a táblának a sorai is 1 blokkot foglalnak és a tábla kb. 120 sorból áll.
     Mennyi a műveletigénye
      - egy hash alapú,
      - egy rendezés alapú és
      - egy beágyazott ciklusos algoritmusnak,
     ami arra válaszol, hogy az egyes dolgozók összesen mennyit költöttek?
     Feltehetjük, hogy az összegeket gyűjtő számlálók még beférnek a memóriába
     a blokkok mellett.
     Írjuk le röviden, hogy az egyes algoritmusok hogyan fognak működni.
     Adjuk meg a kosarakat a hasítás alapú algoritmus első menete után.

_______________________________________________________
7. gyak. (
2008.X.21-kedd ill. XI.6-csüt)  - I.ZH
 
>> lásd AB szakirány (IP-abATM)  illetve  C szakirány (IP-cAMÜ)

_______________________________________________________
8. gyak. (XI.4) ill. 9.gyak.(XI.11/13)  - Lekérdezések optimalizálása

>> 5.5. Feladatok végrehajtási tervek előállítására és megváltoztatására tippek segítségével
>> 5.6. Végrehajtási tervek megváltoztatása statisztikák létrehozásával és törlésével
>> 5.7. SQL utasítás rekonstruálása a végrehajtási terv alapján és a KÖTELEZŐ 7HF

5.5. Feladatok végrehajtási tervek előállítására
    és
megváltoztatására tippek (hint) segítségével

Feladatok - Nikovits Tibor Információkezelés gyakorlatai alapján
Segédanyagok:
>> Oracle Doc. - Performance Tuning Guide HTML   PDF 
>> Nikovits Tibor EA-ból: Lekerdezes.pdf  (.doc)
     hintek.txt   tervek1.txt   tervek2.txt   tervek3.txt 
                            
Előkészítés:
   - A gyakorlatokon az oradb adatbázisban az sqldeveloper-rel dolgozunk, ahol
     a SELECT-teket az Execute Statement (F9) hajtjuk végre és az eredményt
     a Result ablakban látjuk, a végrehajtási terveket az Execute Explain Plan (F6)
     segítségével készítjük el, annak eredményét pedig az Explain ablakban találjuk.
   - Mivel a Result és az  Explain ablakok eredményét nem tudjuk beadandókban
     illetve ZH-ban beküldeni, ezért a beadandókhoz Run Script (F5)-tel futtassuk
     a SELECT lekérdezést (ahogyan a PL/SQL -t). Ekkor a Script Output-ból 
     ki tudjuk vágni az eredményt a beadandó egyszerű szöveges .txt állományba.
   - A kötelezően beadandó feladatoknál a lekérdezést (hintekkel együtt), annak
     végeredményét, és a végrehajtási terveket egy szöveges állományba tedd be.

   - Ehhez, vagyis a végrehajtási tervek fastruktúrájának szöveges megjelenítéséhez:
   - Hozzuk létre a PLAN_TABLE nevű táblát az utlxplan.sql script segítségével,
      majd készítsük el az utasítások végrehajtási tervét a a PLAN_TABLE táblába:

EXPLAIN PLAN SET statement_id='utasitas_egyedi_neve' INTO plan_table

FOR SELECT ...  

   - Ezután vegyük is ki a terveket a táblából a megfelelő lekérdezéssel  
     Emlékeztetőül a hierarchikus szerkezetű adatok lekérdezése SELECT
     utasítás segítségével: a hierarchia gyökerét (gyökereit) a START WITH-el, 
     a szülő és gyermek sorok közti kapcsolatot a CONNECT BY-al kell megadni,

SET PAGESIZE 40
SET LINESIZE 132
COLUMN terv FORMAT A50
COLUMN feltetel FORMAT A80 TRUNCATED
COLUMN "feltetel (access--filter)" FORMAT A80 TRUNCATED

SELECT LPAD(' ', 2*(level-1))||operation||' + '||options||' + '||object_name terv,
access_predicates||' -- '||filter_predicates "feltetel (access--filter)"
FROM plan_table
START WITH id = 0 AND statement_id = 
'utasitas_egyedi_neve'
CONNECT BY PRIOR id = parent_id AND statement_id = 
'utasitas_egyedi_neve'
ORDER SIBLINGS BY position;


   - Figyeljünk oda, hogy a fenti EXPLAIN PLAN SET statement_id='XXX'  
      az 'XXX'-k helyére minden feladatnál új statement_id-t adjunk meg, és
      ugyanezt az egyedi nevet haszáljuk a tervek megjelenítésénél  a SELECT ... 
   FROM plan_table 
START WITH id = 0 AND statement_id = 'XXX'
   CONNECT BY PRIOR id = parent_id AND statement_id = 
'XXX'...

   - Vagy használhatjuk a dbms_xplan package-et is, részletek lásd expl.sql végén,
      valamint az Oracle 10g Doksikban: Performance Tuning Guide  HTML   PDF
 
Lekérdezések az Oracle EMP, DEPT, SALGRADE alaptáblái alapján
55plan_1
   - Az ORAUSER felhasználó EMP, DEPT és SALGRADE (fizetési kategóriák)
     tábláiból hozzatok létre saját példányokat, és ezekre vonatkozóan:
  -  Adjuk meg azoknak az osztályoknak a neveit, amelyeknek van olyan dolgozója,
     aki az 1-es fizetési kategóriába esik.

55plan_2
   - Ezután hozzunk létre indexet valamelyik táblához, majd adjuk meg a rendszer
     által létrehozott új végrehajtási tervet. Olyan indexeket hozzunk létre, amit
     a lekérdezésben használni tud a rendszer és ez legyen is látható az új tervből.

Lekérdezések NIKOVITS.CIKK, SZALLITO, PROJEKT, SZALLIT táblái alapján
A NIKOVITS felhasználó tulajdonában vannak a következő táblák:
CIKK(ckod, cnev, szin, suly)
SZALLITO(szkod, sznev, statusz, telephely)
PROJEKT(pkod, pnev, helyszin)
SZALLIT(szkod, ckod, pkod, mennyiseg, datum)

A táblákhoz indexek is vannak létrehozva, ezek tulajdonságait
a katalógusból nézhetitek meg, ha szükségetek van rá.

55plan_3
   - Adjuk meg a következő lekérdezéseket és a hozzájuk tartozó végrehajtási
     tervek fa struktúráját. Minden esetben lehet hinteket használni.
  - 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.

55plan_4
    - 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).

5.6. Végrehajtási tervek megváltoztatása statisztikák létrehozásával és törlésével

Feladatok - Nikovits Tibor Információkezelés gyakorlatai alapján
Segédanyagok:
>> Oracle Doc. - Performance Tuning Guide HTML   PDF 
>> Nikovits Tibor EA-ból:  tervek3.txt 

56stat_1 (Papíron oldjuk meg! Vizsgán is várható feladat!)
   - Hozzunk létre 10 intervallumos magasság alapú hisztogramot az alábbi eloszlású
     adatokra vonatkozóan, vagyis adjuk meg az egyes intervallumok végpontjait.
     1-100 (2), 101-300 (1), 301-400 (4), 401 (200)
     (Az előfordulások száma zárójelben szerepel, pl. 1-100 (2) azt jelenti, hogy
     1 és 100 között minden érték kétszer fordul elő, vagyis 1 és 100 között 200
     előfordulás van, tehát a táblának összesen 1000 sora van). 

56stat_2 (Papíron oldjuk meg! Vizsgán is várható feladat!)
   - Hozzunk létre 10 intervallumos szélesség (gyakoriság) alapú hisztogramot is
     ugyanezekre az adatokra.
     1-100 (2), 101-300 (1), 301-400 (4), 401 (200)

56stat_3
   - Hozzatok létre egy saját példányt a nikovits.szallit táblából, 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.

5.7. SQL utasítás rekonstruálása a végrehajtási terv alapján

Feladatok - Nikovits Tibor Információkezelés gyakorlatai alapján
Segédanyagok:
>> Oracle Doc. - Performance Tuning Guide HTML   PDF 
>> Nikovits Tibor EA-ból:  tervek4.txt   

Lekérdezések az Oracle demo táblák alapján  (lásd  AB_plsema08s.html)

57vterv_1
   - Adjuk meg azoknak a vevőknek a nevét (SH.CUSTOMERS), akik
      nőneműek (cust_gender = 'F') és szinglik (cust_marital_status = 'single'),
      vagy 1917 és 1920 között születtek.
     a) Vegyük rá az Oracle-t, hogy a meglévő bitmap indexek alapján érje el a tábla sorait.
     b) Vegyük rá, hogy ne használja ezeket az indexeket.

57vterv_2
   - Adjunk meg egy olyan lekérdezést az sh tábláira (hintekkel együtt ha szükséges),
      aminek az alábbi lesz a végrehajtási terve:

   TERV (OPERATION + OPTIONS + OBJECT_NAME)
   --------------------------------------------------------------
   SELECT STATEMENT +  +
     SORT + ORDER BY +
       TABLE ACCESS + BY INDEX ROWID + CUSTOMERS
         BITMAP CONVERSION + TO ROWIDS +
           BITMAP AND +  +
             BITMAP INDEX + SINGLE VALUE + CUSTOMERS_MARITAL_BIX
             BITMAP OR +  +
               BITMAP INDEX + SINGLE VALUE + CUSTOMERS_YOB_BIX
               BITMAP INDEX + SINGLE VALUE + CUSTOMERS_YOB_BIX
               BITMAP INDEX + SINGLE VALUE + CUSTOMERS_YOB_BIX


7HF: Kötelezően beadandó feladatok

Összesen 10 pont szerezhető, amely C-szakirányon a két gyak.ZH pontjahoz
és az AB-szakirányon pedig az IP-abATM vizsgazh értékébe fog beszámítani.
A különböző végrehajtási tervek előállításához hinteket használjatok ha szükséges.
Az alábbi feladatoknál beküldendő
SELECT  /*+ tipp lista */ ...  vagyis a lekérdezés (hintekkel együtt),
lekérdezés outputja (ha az eredménytábla nagy, akkor annak csak az első 5 sora),
végrehajtási tervek fastruktúrájának szöveges megjelenítése (lásd Előkészítés és
  lásd végrehajtási tervekre példák: tervek1.txt   tervek2.txt   tervek3.txt   tervek4.txt)
mindezt egy szöveges állományba tegyétek bele. Kérem, hogy a fájlban a feladatok
adott sorrendjét kövessétek, valamint megjegyzésekkel világosan különítsétek el, hogy
melyik rész melyik feladathoz tartozik. A szövegfájl első sora egy olyan megjegyzés
legyen, amely tartalmazza a hallgató nevét és az EHA kódját (ETR azonosítóját).
Beküldése: Beadandók, géptermi ZH feladatok beküldése (ablinux-ra ftp-vel).
Határidő: 2008. november 24. hétfő éjfélig a gyakorlat vezetőnek beküldve
lásd  kotelezo_feladat_xplan.txt, vagyis az alábbi 1-6. feladatok:

Lekérdezések NIKOVITS.CIKK, SZALLITO, PROJEKT, SZALLIT táblái alapján

1.feladat (1 pont)
   - 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.feladat (1 pont)
   - 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).

Lekérdezések az Oracle demo táblák alapján  (lásd  AB_plsema08s.html)

3.feladat (2 pont)
   - Adjuk meg egy féléves időszakra (illetve egy másik féléves időszakra) vonatkozóan az
     eladások (SH.SALES) összmennyiségét, úgy, hogy az Oracle ne használjon indexet és
     a) pontosan 2 partíciót olvasson a táblából, illetve  
     b) pontosan 3 partíciót olvasson a táblából.
     Lásd partition_start és partition_stop oszlopokat a PLAN_TABLE-ben!

4.feladat (2 pont)
   - Adjunk meg egy olyan lekérdezést az sh tábláira (hintekkel együtt ha szükséges), aminek
     az alábbi lesz a végrehajtási terve:

  TERV (OPERATION + OPTIONS + OBJECT_NAME)
  -------------------------------------------------------------
  SELECT STATEMENT +  +
    HASH + GROUP BY +
      HASH JOIN +  +
        INLIST ITERATOR +  +
          TABLE ACCESS + BY INDEX ROWID + CUSTOMERS
            BITMAP CONVERSION + TO ROWIDS +
              BITMAP INDEX + SINGLE VALUE + CUSTOMERS_YOB_BIX
        PARTITION RANGE + ALL +
          TABLE ACCESS + FULL + SALES


5.feladat (2 pont)
   - Adjunk meg egy olyan lekérdezést az sh tábláira (hintekkel együtt ha szükséges), aminek
     az alábbi lesz a végrehajtási terve:

  TERV (OPERATION + OPTIONS + OBJECT_NAME)
  ------------------------------------------------------------
  SELECT STATEMENT +  +
    SORT + AGGREGATE +
      HASH JOIN +  +
        TABLE ACCESS + FULL + PRODUCTS
        HASH JOIN +  +
          TABLE ACCESS + BY INDEX ROWID + CUSTOMERS
            BITMAP CONVERSION + TO ROWIDS +
              BITMAP INDEX + SINGLE VALUE + CUSTOMERS_YOB_BIX
          PARTITION RANGE + ALL +
            TABLE ACCESS + FULL + SALES
 
6.feladat (2 pont)
   - Adjunk meg egy olyan lekérdezést az sh tábláira (hintekkel együtt ha szükséges), aminek
     az alábbi lesz a végrehajtási terve:

  TERV (OPERATION + OPTIONS + OBJECT_NAME)
  -------------------------------------------------------------
  SELECT STATEMENT +  +
    SORT + ORDER BY +
      HASH + GROUP BY +
        HASH JOIN + ANTI +
          PARTITION RANGE + SINGLE +
            TABLE ACCESS + BY LOCAL INDEX ROWID + SALES
              BITMAP CONVERSION + TO ROWIDS +
                BITMAP INDEX + SINGLE VALUE + SALES_TIME_BIX
          TABLE ACCESS + FULL + CHANNELS