Cviceni 2

Typické statistiky pro tabulky

nR # of tuples (rows) of relation R
V(A,R) # of R[A] (# of different values A in relation R)
pR # of pages to store R
bR block factor (how many tuples(rows) in average fit into a block
M # of a free memory for query processing (in db blocks)
l(A,R) # of levels of index tree for key A indexing R

Typické statistiky pro indexy

f(A,R) average # of followers (childs) of branch node
(~50-100 in real DBs)
I(A,R) # levels of index tree
(~2-3 in real DBs) ~ log(V(A,R))/log(f(A,R))
p(R,A) # of leafs blocks

Vypocty cen

Teorie

B-INDEX

  • umožňuje rychlé nalezení ID
  • I/O = I(A,R)
  • pro přístup k datům musíme do datových bloků (I(A,R)+1)

CLUSTER

  • I/O stejné jako B-strom, ale data jsou v blocích za sebou

INDEX ORGANISED TABLE

  • data jsou fyzicky setříděná
  • data jsou přímo ve stromu (nemusíme do datových bloků)

Příklady

  • průměrná délka pro řádek relace EMP = 60B
  • průměrná délka pro řádek relace DEPT = 100B

Table statistics

EMP:

  • RowAvg = 60B
  • Br (blokovací faktor) = 60 ~ (4096 - 300) * 0,9 / 60
  • Nr (počet řádek) = 30 000
  • Pr (počet stránek pro uložení relace) = 30 000 / 60 ~ 500
  • V(DEPTNO, EMP) = 100
  • V(EMPNO, EMP) = 30000
  • Max(EMPNO,EMP)=30000, MIN(EMP,EMPNO)=1
  • Index nad EMPNO:
  • Bi ~ 150 … max. mozna arita B+ stromu
  • Fi (počet větvení ve vnitřním bloku indexu) … tato hodnota rozhodně nemůže být větší než Bi. V praxi bývá v rozmezí (50 - 100)% Bi.
  • Pro náš příklad položme Fi = 100.
  • I(EMP,EMPNO) (hloubka stromu) ~ log(Nr)/log(Fi) ~ log(30 000) / log(100) = 4.47/2 ~ 5/2 ~ 3

DEPT:

  • RowAvg = 100B
  • Bdept ~ 40
  • Ndept = 100
  • Pdept = 100 / 40 ~ 3
  • Index nad DEPTNO: Fi = 100
  • I(DEPT, DEPTNO) ~ log(100) / log(100) = 2/2 = 1

SELECT

SELECT * FROM EMP WHERE EMPNO = 745
  • FULL TABLE SCAN: I/O = Pemp = 500
  • INDEX: I/O = I(EMP, EMPNO) + 1 = 3 + 1 = 4
    • průchod stromem indexu + načtení odkazovaného datového bloku
SELECT * FROM EMP WHERE EMPNO > 150
  • FULL TABLE SCAN: I/O = Pemp = 500
  • INDEX:
    • I/O = I(EMP, EMPNO) + [(MAX(EMPNO)-hranice)/Bemp]+(MAX(EMPNO)-hranice)
    • I/O = 3+(30000-150)/150+(30000-150)=3+29850/150+29850=3+199+29850= 30052
    • cesta dolu indexem + cesta doprava listovými uzly + jednotlivé návštěvy datových bloků; každý index může odkazovat na jiný datový blok → musím načítat datový blok pro každý index
  • CLUSTER INDEX:
    • I/O = I(EMP, EMPNO) + [(MAX(EMPNO)-hranice)/Bemp]+[(MAX(EMPNO)-hranice)/Bemp]
    • I/O = 3 + [(30000-150)/150] + [(30000-150)/150] = 3 + 199 + 29850/60 = 202 + 498 ~ 700 > 500
    • datové řádky sousedních klíčů jsou vedle sebe v datových blocích, datové bloky však řazené nejsou → je třeba načítat všechny klíče
  • INDEX ORGANISED TABLE:
    • I/O = I(EMP, EMPNO) + [(MAX(EMPNO)-hranice)/Bemp]
    • I/O = 3 + [(30000-150)/150] = 3 + 199 = 202
    • nejdeme do datových bloků, data jsou přímo ve stromě
SELECT * FROM EMP WHERE EMPNO < 151
  • FULL TABLE SCAN: I/O = Pemp = 500
  • INDEX:
    • I/O = I(EMP, EMPNO) + [(hranice - MIN(EMPNO))/Bi]+( hranice - MIN(EMPNO)
    • I/O = 3+(150)/150+(150)=3+1+150= 153 < 500
    • cesta dolu indexem + cesta doleva listovými uzly + jednotlivé návštěvy datových bloků
  • CLUSTER INDEX:
    • I/O = 3+ 1 + [150/Bemp] = 3+1+150/60 ~ 7 < 500

JOIN

Nested loop

  • S*R, platí S<R
  • množství paměti M=3 (minimum)
  • jedna buňka pro R, jedna pro výstup, zbytek (N) pro menší relaci - S
  • I/O = P_S + (P_S/N)*P_R
  • Vylepšení ZIK-ZAK: P_S + (P_S/N)*P_R - (P_S/N)-1]
SELECT * FROM DEPT D, EMP E WHERE D.DEPTNO = E.DEPTNO
  • M=3: I/O = P_dept + P_dept*P_emp = 3 + 3*500 = 1503 (1501)
  • M=4: I/O = Pdept + (Pdept/2)*Pemp = 3 + 2*500 = 1003 (1002)

Merge join

  • N = stranek v relaci, B = velikost pameti (bufferu)
  • SORT:
    • I/O = 2 * N * [log_B-1(N)+1]
    • (načtení stránek + zapsání stránek) * počet kroku
  • MERGE:
    • I/O = N1+N2
    • slití relací
  • TOTAL:
    • I/O = SORT(N1)+SORT(N2) +N1 +N2
school/fit/mipdb/cv02.txt · Last modified: 2018-06-21 19:48 (external edit)
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0