IP-08abctAB2G
Adatbázisok-2 gyakorlat
ELTE, 2014/2015.tanév I.félév,
dr. Hajas Csilla gyak.vez.
Hétfő
12:15-13:45 PC3, 14:00-15:30 PC3,
Szerda 10:15-11:45 PC9
AB2gyak
(főmenü)
AB2ea
4.gyak
6.gyak
OracleDoc
5.gyak.
Indexstruktúrák-II.
G (gépes
témakör)
> G7. Feladatok
index
szervezett
táblákra (IOT)
E (elméleti témakör)
> E4.
Hasító indexek (Tk.4.4. fejezete)
> E5.
Bitmap indexek
(Tk.5.4. fejezete)
G7.
Feladatok
index szervezett táblákra (IOT)
Segédanyagok:
Lásd IOT.txt
- Index
szervezett táblák, IOT részei (index,
tábla)
>> OracleDoc:
Concepts
>> 3
Overview of Index-Organized Tables
Állapítsuk meg ezeknek az IOT
táblák a
különböző tulajdonságait
a
katalógusokból.
DBA_INDEXES,
DBA_TABLES,
DBA_OBJECTS,
DBA_SEGMENTS
7.01. Hozzuk létre a IOT.txt
segédletben szereplő cikk_iot indexszervezésű
táblát.
Adjuk meg mely
felhasználók tulajdonában vannak ezek
('CIKK_IOT'-vel
kezdődő) index-szervezett táblák.
Adjuk
meg a táblák
és
táblaterek nevét is.
(Melyik
táblatéren vannak ezek a
táblák? ->
miért nem látható?)
7.02. Adjuk meg a fenti
táblák index
részét, és azt, hogy ezek az index
részek (szegmensek)
melyik
táblatéren vannak? Keressük meg
a szegmensek
között az előző táblákat
illetve
indexeket, és
adjuk meg a
méretüket. Keressük meg az
adatbázis objektumok
között a fenti
táblákat
és indexeket, és
adjuk meg az objektum
azonosítójukat és
adatobjektum
azonosítójukat (DBA_INDEXES,DBA_TABLES,DBA_OBJECTS).
7.03. Adjuk meg a fenti
táblák túlcsordulási
részeit (ha van). Keressük meg
a
túlcsordulási részeket a
szegmensek
között és
adjuk meg a
méretüket.
Keressük meg az objektum
azonosítóikat és az adatobjektum
azonosítóikat is.
7.04. Adjuk meg azokat az index szervezett
táblákat,
amelyeknek pontosan egy
dátum
típusú oszlopa van.
7.05.
Írjunk
meg
egy plsql
procedúrát,
amelyik a paraméterül kapott index
szervezett
tábláról
kiírja a
tábla méretét.
PROCEDURE
iot_meret(p_owner
VARCHAR2, p_tabla VARCHAR2)
Vigyázzunk, mert a
táblának lehet index és
túlcsordulási szegmense is.
E4.
Hasító indexek (Tk.4.4. fejezete:
Tördelőtáblák)
Segédanyagok:
Hasító
index, lásd
2.előadás: fizika.p9,
fizika.pp11-16
és fizika.pp17-20
Molina-Ullman-Widom: Adatbázisrendszerek
megvalósítása, Panem, 2001.
4.fej. Indexstruktúrák -> 4.4.
Tördelőtáblázatok dinamikus_tordeles.pdf
Feladatok:
E1.1 Kiterjeszthető
hasító index (vagy
másképp kiterjeszthető
tördelőtáblázat)
A
kosártömb mérete
mindig pontosan 2**i.
Tegyük fel, hogy
egy blokkba 2 rekord
fér el, j
értéke (a blokkok jobb oldalán)
azt
jelzi, hogy hány bit használatos a blokkhoz
tartozás eldöntésére.
i=1
---- 0001
0 | -|---> ----1
| |
1 | -|---> 1001
---- 1100
----1
kosártömb
blokkok
Szúrjuk be az
alábbi
hasító
értékkel rendelkező sorokat egymás
után,
és minden
újabb blokk
létrehozása
után rajzoljuk újra a
kosártömböt
és a blokkokat.
0011, 0110, 1011, 0111, 1110, 1111, 0100
-- Egy kis segítség a kiterjeszthető
hasító
indexhez:
A K kulcsú rekordot h(K) első i bitje alapján
helyezzük el úgy, hogy
követjük a kosártömb ezen
bejegyzéséhez tartozó
mutatót.
Ha nincs hely a megtalált blokkban akkor a
következőt tesszük:
1. Ha j < i akkor újabb blokkot hozunk
létre és a j+1-edik bit alapján
kettéosztjuk a rekordokat a két blokk
között
(mindkét blokkra j+1 lesz
az új
érték), majd a kosártömb
szükséges
mutatóit az új blokkra
irányítjuk.
2. Ha j = i akkor először i-t növeljük
1-gyel, megduplázzuk a
kosártömböt,
új
mutatókat teszünk bele, majd alkalmazzuk 1.-et.
E1.2. Lineáris hasító index
Az előre megadott
küszöbszám (rekordok
száma/kosarak száma)
legyen 2,4.
(H.F.: Nézzük meg akkor is, ha a
küszöbszám 1,7!)
Készítsünk lineáris
hasító
indexet, tegyük fel, hogy egy blokkba
2 rekord
fér el
és a
kosarak az alábbi rekordokat
tartalmazzák:
i=1
n=2
r=3
----------
0 | 0000 | |
| 1110 |
----------
1 | 0101 | |
| |
--------
Szúrjuk
be az alábbi hasító
értékkel rendelkező sorokat egymás
után,
és minden
újabb blokk megnyitás után rajzoljuk
újra a
kosarakat.
0001, 0110, 1011, 0111, 1100, 1111, 0100
-- Egy kis segítség a
lineáris hasító indexhez:
Ha n kosarunk van, akkor a K kulcsú rekordot h(K)
utolsó
i bitje alapján
tesszük a megfelelő kosárba (i=log2n).
Ha nincs benne hely, akkor újabb blokkot
láncolunk ehhez
a kosárhoz.
Ha nincs ilyen kosár, akkor az első bitben
különböző kosárba
tesszük.
Ha az előre megadott küszöböt
átléptük, akkor új kosarat
nyitunk.
Szükség esetén
növeljük i-t
E5. Bittérképindexek
(Tk.5.4.
fejezete)
Segédanyagok:
lásd előadáson 9ituning 83-84.o:
Bitmap index + Oracle
Concepts doksi
Molina-Ullman-Widom: Adatbázisrendszerek
megvalósítása, Panem, 2001.
5.4. Bittérképindexek szakaszhossz_kodolas.pdf
>> OracleDoc:
Concepts
>> 3
Overview of Indexes
>> Oracle10g Concepts/Part
II. Architecture/5. Schema Objects >>Overview
of Indexes
1.feladat:
Tegyük fel, hogy a
dolgozó
tábla 14 sorból áll
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
-
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.
2.feladat,
lásd Tankönyv
5.4.Bittérképindexek: Szakaszhossz_kodolas
- Tömörítse az előző
feladatban kapott
bitvektorokat a szakaszhossz kódolással.
- Fejtsük vissza a következő,
szakaszhossz
kódolással
tömörített bitvektort:
11101101001011