SQL – OLAP 7. óra
-
Upload
mara-frederick -
Category
Documents
-
view
53 -
download
2
description
Transcript of SQL – OLAP 7. óra
SQL – OLAP7. óra
Hatékonysági kérdések
Időigényes műveletek (ahol lehet javítani):f(v)(C) , f(D.a)(C), D.a(C), D, aggr(C)
(és ahol nem…) C1 C2
Adott kulcsú cellák megkeresése
k1 k2 k3 v1 v2 v3
A: szekvenciális keresés ? reménytelen !!
B: index alapú keresés ? k1+k2+k3 : ha mindegyik kulcs adott költség : log (N3) ez OK !!
de asszimnetrikus !
Hatékonysági kérdések
k1 k2 k3 v1 v2 v3
Több-dimenziós keresőfa : minden szint egy-egy dimenzióhoz rendelt ciklikusan
k1
k2
k3
k1
k2
ha valamelyik kulcstetszőleges (intervallum)akkor több ágon fut a keresés
Ha keresési feltétel: k1 = %, k2=x, k3=%csomópontok száma: L,L2,L3 (L a B-fa fokszáma)költség: első k2 szinten: L, második k2 szinten: L*L2,
i. k2 szinten: L2*i+1 ez is túl nagy még !!!
Hatékonysági kérdések
Grid fileSzimmetrikus az egyes dimenziókra
Hash függvény jelöli ki a rekeszt
h1(k1)
h2(k2)
Ha túlcsordul, egyik dimenzió mentén felhasad
Lemez blokk
Hátránya : reláció-őrző hash függvény kellene
Hatékonysági kérdések
Hatékonysági kérdések
Legbiztosabb megoldás: többszörös indexelés, többszintű pointer láncolat
k1 index k2 index k1-k2 index
Dorog
Miskolc
Baja
Audi Opel Fiat Lada
Fizikai megvalósítás
7,2 6,1 7,0 3,2
9,1 7,4
7,2 4,2
K
G P
LA F O
többletköltség?
Hatékonysági kérdések
k1 index Keresés menete: - megfelelő szintű index kiválasztása - érték megkeresés (log (Nk))- fő pointer-lánc bejárása- mellék pointer-láncok bejárása
Csak a szükséges elemeket érinti
Indexelés: sparse - dense index
ritka index: nem minden rekord indexelt(index szekvenciális)
feltétel: rendezettség szélső elemre mutat
lsd: cluster index
sűrű index: minden rekord indexelt
idő:logM(N/k) + [k]= logMN - logMk + [k]
hely: N/k/M blokk
Indexelés: bitmap index
értékek
A
B
C
rekordok
0
1
szűk domain esetéretámogatja a logikai operátorokatgyakran társítják a projekciós index-szel
C
rekordok
érték B
1
0
táblázatos tárolás
Összetett feltételek, több kulcs esetére is alkalmas a bitmap index
fetétel: K1 = 5 and K2 > 5
B-fa szerint: K1=5 megkeresése majd szekvencia a K2> 5 ellenőrzésre
0
1
1
05
K1
0
1
1
06
7
+ metszetképzés / unió / komplementer
K2
Bitindexek típusai
normál mód: minden érték egy sor
1
2
3
0
1
1
0
0
0
0
0
1
előnyös egzakt érték keresésnél
tartomány mód: minden érték több sor (a tőle nagyobb értékek)
1
2
3
0
1
1
0
0
1
1
1
1
előnyös tartomány érték keresésnél
Bitindexek típusai
dekompozíciós mód: a tábla több résztáblára bontott
<rn,…,r2,r1> szám n-es alapján képzi a bitmintát:
C = b1 + b2*r1 + … + bn+1*rn
Pl. n =1 , b1 = 3 –hez: 5 = 1*3 + 2
0
1
1
0
0
0
0
0
1
0
1
0
1
0
0
0
0
1
0
1
2
0
1
2
rn = D/szorzatn-1(ri)
Bitindexek típusai
hierarchikus bitindex: a zéró helyek felsőbb szinten jelzi
1
0
1
1
0
0
0
0
0
10
1
2
00 0 0 0 0 0 1 0
0 1 01
1 1 01
Join index
A kapcsolódó rekordpárok kijelölése kulcs szerint rendezve
Nem kell explicit keresést végezni
TELEPHELYcimnev
TERMEKcimnevOSSZDB
SELEJTDB
TELEP TERMEKOSSZDB
B-fa
tény-kulcshoz dimenzió-kulcsot vagy dimenzió-kulcshoz tény-kulcsot rendel
Cella keresési költségek
B-fa
teljes kulcs intervallum
logMN
módszer
Grid-file
bitmap
részkulcs
1 fa: Nk-fa: K’ logMN + K’*N’
1
(metszetek)
logMN+N/(2B)
HK-K’ (H/2)K
N :elemszám, M fokszám V : értékek száma, K’ kiválasztott dim. dbB: blokkméret, H: bucketek száma, K:dimenziók száma
V*N/B’ V’*N/B’ V*N/2/B’
Aggregációs számítások
SELECT sum(fiz) FROM dolgozok WHERE beosztas = ‘irnok’
- alap módszer: a kijelölt rekordok közvetlen beolvasása
N: rekord db., B: blokk méret, R: eredmény rekord db.érintendő blokkok száma: O(N/B * (1 – e-RN/B))
nem egyszerű feladata = szummaB(B* P(B))P(B) = ((N:B))szorzati((S:i)) : 1<= i <= S
R
N/B
a feltételt teljesítő rekordok pozíciót ismertnek tekintjük (Bf)
Aggregációs számítások
- projekciós index módszer: a kijelölt mező értékeket a a projekciós indexből vesszük be.
előny: kevesebb blokk olvasás (B’ >> B)
O(N/B’ * (1 – e-RN/B’))
- mező indexen keresztül (B’’ >> B’):sum = 0foreach v in DOM(fiz) { Bv = foundset az index alapján sum = sum + v*|Bf metszet Bv |}
O(V*N/B’’ + N/B’)
Aggregációs számítások
A költség függ az aggregáció jellegétől
SELECT max(fiz) FROM dolgozok WHERE beosztas = ‘irnok’
- közvetlen elérés:O(N/B * (1 – e-RN/B))
- bitmap index az elemre (metszet a Bf-fel):O(V*N/B’’ )
- projekciós index:O(N/B’ * (1 – e-RN/B’))
- mező indexO(V/2*N/B’’ + N/B’)
Hatékonysági kérdések
Az aggregáció gyorsítása: elő-aggregációk tárolása
elemi érték (k1,k2)
k1 szerinti aggregáció
k2 szerinti aggregáció
k1.k2 szerinti aggregáció
Cube-tree struktúra
az alapadatok és az aggregált adatok hatékony elérésére szolgál
alapadat
aggregált adatok
v(x,y,z)
v(x,y,0)
az adatok R-tree struktúrában tároltak
v(0,0,0)
Előaggregáció előnye:gyorsabb válaszadás
Hátránya:több helyfoglaláslassabb módosítás (load)
Cél az egyéb költségek minimalizálása
Csak a szükséges előszámításokat végezzük el
Tapasztalat: egyes aggregációk kiszámíthatók más aggregációs értékekből
A, Sum(C) A,B, Sum(C) A,B,C, Sum(C)
Származtatási háló ez egyes aggregációs szintek között
A,B,C
A,B A,C B,C
A B C
Minden view-hoz helyköltség, minden élhez időköltség rendelhető
hely-költség + idő-költség => minimális
Greedy algoritmus
addig növeli a bevont elemek halmazát, amíg egy szigorúkorlátba nem ütközik
S = {alap-view}loop { vi = argmaxi {B(vi,S) : vi S} S = S {vi}}
B(v,S) = w < v Bw
Bw = CostS(w) - Costv(w), ha CostS(w) > Costv(w) 0 , különben
0.7
0.5 0.2 0.4
0.4 0.4
2
3
13
1 45
21
2
2 30.2
0.2
Az eredő nyereség kiszámítsánál a v hivatkozási valószínűségétis figyelembe lehet venni.
Lekérdezések kapcsolati viszonya
Milyen feltételek mellett lehet egy Q lekérdezést másV view-kból leszármaztatni?
relációk: view-k egyenértékűsége és view-k egymásbafoglalása
Általános esetre nem ismert még a megoldás
speciális eset: pontos illeszkedés V1 < V2:- V1 mezői, hivatkozásai V2-ben is benne vannak- azonos aggregáció- V2 szelekciói V1-ben is benne vannak- V1 szelekciói szűkebbek
V2: SELECT a,sum(b), avg(c), d FROM t1 WHERE t1.c > 5 GROUP BY a
V1: SELECT a,sum(b) FROM t1 WHERE t1.c > 5 AND t1.d = 5GROUP BY a
Hatékonyabb művelet optimalizálás
a hagyományos QGM optimalizálás is módosulhateddig csak SPJ műveleteket vettünk
: szelekcio(proj) - join – szelekcio – csoportképzés? –aggregáció?
SELECT B.b, sum(A.a) FROM A,B,C WHERE A.m=B.n AND A.h = C.f AND C.l = x GROUP BY B.b
De!Az A és B tábla join-ja közben lehet aggregálni és csoportosítani,nem kell utána újra átfutni a táblát
Hatékonyabb művelet optimalizálás
szabály : a csoportosítás lesüllyesztése minél lentebbre
SELECT B.b, sum(A.a) FROM A,B,C WHERE A.m=B.n AND A.h = C.f AND C.l = x GROUP BY B.b
alap left-deep join
aggregáció
ekvijoin
scan
transzformáció
Lesüllyesztés feltételei
- a csomópont felett csak kulcs- idegenkulcs alapú join műveletek vannak- a csomópontban minden aggregációs mező szerepel- minden felettes join mező egyben csoportképzési mező is
ez szűk esetben teljesül
kapcsolt lesüllyesztések: - több csomópontra szétbontott
select C.n,sum(A.c) from A,B,Cwhere A.x = B.x and B.y=C.y group by C.n
C.a
C
A
A.xB
B.y
sum(A.c)
sum(A.c)
sum(A.c)
A B C