Title: Temple University 
 1Temple University  CIS Dept. CIS661  Principles 
of Data Management
- V. Megalooikonomou 
- Query Optimization 
- (based on slides by C. Faloutsos at CMU) 
2General Overview - rel. model
- Relational model - SQL 
- Functional Dependencies  Normalization 
- Physical Design 
- Indexing 
- Query optimization 
- Transaction processing
3Overview of a DBMS
casual user
Naïve user
DBA
DML parser
DDL parser
DML precomp.
trans. mgr
buffer mgr 
 4Overview - detailed
- Why q-opt? 
- Equivalence of expressions 
- Cost estimation 
- Cost of indices 
- Join strategies
5Why Q-opt?
- SQL declarative 
- good q-opt -gt big difference 
- eg., seq. Scan vs B-tree index, on P1,000 pages
6Q-opt steps
- bring query in internal form (eg., parse tree) 
-  into canonical form (syntactic q-opt) 
- generate alternative plans 
- estimate cost pick best
7Q-opt - example
Canonical form
p
select name from STUDENT, TAKES where 
c-idCIS661 and STUDENT.ssnTAKES.ssn
s
STUDENT
TAKES 
 8Q-opt - example
Hash join merge join nested loops
Index seq. scan 
 9Overview - detailed
- Why q-opt? 
- Equivalence of expressions 
- Cost estimation 
- Cost of indices 
- Join strategies
10Equivalence of expressions
- A.k.a. syntactic q-opt 
- In short perform selections and projections 
 early
- More details 
-  see transformation rules in text 
11Equivalence of expressions
- Q How to prove a transformation rule? 
- A use TRC, to show that LHS  RHS, e.g. 
12Equivalence of expressions 
 13Equivalence of expressions 
 14Equivalence of expressions
- Q how to disprove a rule??
15Equivalence of expressions
- Selections 
- perform them early 
- break a complex predicate, and push 
- simplify a complex predicate 
- (XY and Y3) -gt X3 and Y3
16Equivalence of expressions
- Projections 
- perform them early (but carefully) 
- Smaller tuples 
- Fewer tuples (if duplicates are eliminated) 
- project out all attributes except the ones 
 requested or required (e.g., joining attr.)
17Equivalence of expressions
- Joins 
- Commutative , associative 
- Q n-way join - how many diff. orderings?  
 Exhaustive enumeration too slow
18Q-opt steps
- bring query in internal form (eg., parse tree) 
-  into canonical form (syntactic q-opt) 
- generate alt. plans 
- estimate cost pick best
19Cost estimation
- Eg., find ssns of students with an A in CIS661 
 (using seq. scanning)
- How long will a query take? 
- CPU (but small cost decreasing tough to 
 estimate)
- Disk (mainly,  block transfers) 
- How many tuples will qualify? 
- (what statistics do we need to keep?)
20Cost estimation
- Statistics for each relation r we keep 
- nr   tuples 
- Sr  size of tuple in bytes
21Cost estimation
Sr
- Statistics for each relation r we keep 
-  
- V(A,r) number of distinct values of attr. A 
- (recently, histograms, too) 
1
2
3
nr 
 22Derivable statistics
- fr blocking factor  max records/block (?? 
 )
- br  blocks (?? ) 
- SC(A,r)  selection cardinality  avg of records 
 with Agiven (?? )
23Derivable statistics
- fr blocking factor  max records/block ( B/Sr 
 B block size in bytes)
- br  blocks ( nr / fr )
24Derivable statistics
- SC(A,r)  selection cardinality  avg of records 
 with Agiven ( nr / V(A,r) ) (assumes
 uniformity...)  eg 30,000 students, 10 colleges
 how many students in CST?
25Additional quantities we need
- For index i 
- fi average fanout - degree (50-100) 
- HTi  levels of index i (2-3) 
-  log(entries)/log(fi) 
- LBi  blocks at leaf level
HTi 
 26Statistics
- Where do we store them? 
- How often do we update them?
27Q-opt steps
- bring query in internal form (eg., parse tree) 
-  into canonical form (syntactic q-opt) 
- generate alt. plans 
- selections sorting projections 
- joins 
- estimate cost pick best
28Cost estimation  plan generation
- Selections  eg., 
- select  
- from TAKES 
- where grade  A 
- Plans? 
29Cost estimation  plan generation
- Plans? 
- seq. scan 
- binary search 
- (if sorted  consecutive) 
- index search 
- if an index exists 
30Cost estimation  plan generation
- seq. scan  cost? 
- br (worst case) 
- br/2 (average, if we search for primary key) 
31Cost estimation  plan generation
- binary search  cost? 
- if sorted and consecutive 
- log(br)  
- SC(A,r)/fr (blocks spanned by qualified tuples) 
-  -1 
32Cost estimation  plan generation
- estimation of selection cardinalities SC(A,r) 
- non-trivial  details later 
33Cost estimation  plan generation
- method3 index  cost? 
- levels of index  
- blocks w/ qual. tuples 
-  
...
case1 primary key case2 sec. key  clustering 
index case3 sec. key  non-clust. index 
 34Cost estimation  plan generation
- method3 index  cost? 
- levels of index  
- blocks w/ qual. tuples 
-  
..
case1 primary key  cost HTi  1 
 35Cost estimation  plan generation
Sr
- method3 index - cost? 
- levels of index  
- blocks w/ qual. tuples 
-  
1
fr
2
case2 sec. key  clustering index OR prim. 
index on non-key retrieve multiple records HTi  
SC(A,r)/fr
br 
 36Cost estimation  plan generation
- method3 index  cost? 
- levels of index  
- blocks w/ qual. tuples 
-  
...
case3 sec. key  non-clust. index HTi  
SC(A,r) (actually, pessimistic...) 
 37Cost estimation  arithmetic examples
- find accounts with branch-name  Perryridge 
- account(branch-name, balance, ...)
38Arithm. examples  contd
- n-account  10,000 tuples 
- f-account  20 tuples/block 
- V(balance, account)  500 distinct values 
- V(branch-name, account)  50 distinct values 
- for branch-index fanout fi  20
39Arithm. examples
- Q1 cost of seq. scan? 
- A1 500 disk accesses 
- Q2 assume a clustering index on branch-name  
 cost?
40Cost estimation  plan generation
Sr
- method3 index  cost? 
- levels of index  
- blocks w/ qual. tuples 
-  
1
fr
2
case2 sec. key  clustering index HTi  
SC(A,r)/fr
br 
 41Arithm. examples
- A2 
- HTi  
- SC(branch-name, account)/f-account 
- HTi 50 values, with index fanout 20 -gt HT2 
 levels (log(50)/log(20)  1)
- SC(..)  qualified records  
- nr/V(A,r)  10,000/50  200 tuples 
- SC/f spanning 200/20 blocks  10 blocks
42Arithm. examples
- A2 final answer 210 12 block accesses 
- (vs. 500 block accesses of seq. scan) 
- footnote in all fairness 
- seq. disk accesses 2msec or less 
- random disk accesses 10msec
43Q-opt steps
- bring query in internal form (eg., parse tree) 
-  into canonical form (syntactic q-opt) 
- generate alternative plans 
- selections sorting projections 
- joins 
- estimate cost pick best
44Examples
- (selection) find student record with ssn123
45Reminder our Mini-U db 
 46DML - nested subqueries
- Drill find the ssn of the student with the 
 highest GPA
-  
47File organization
- Eg., Student records  how would you store them 
 on disk?
48General Overview - rel. model
- Relational model - SQL 
- Functional Dependencies  Normalization 
- Physical Design 
- Indexing 
- Query optimization 
- Transaction processing
49Q-opt steps
- bring query in internal form (eg., parse tree) 
-  into canonical form (syntactic q-opt) 
- generate alt. plans 
- selections (simple complex predicates) 
- sorting projections 
- joins 
- estimate cost pick best
50Reminder  statistics
- for each relation r we keep 
- nr   tuples 
- Sr  size of tuple in bytes 
- V(A,r) number of distinct values of attr. A 
- fr blocking factor 
- br number of blocks 
- SC(A,r) selection cardinality (avg. of records 
 with Agiven)
51Selections
- we saw simple predicates (Aconstant eg., 
 nameSmith)
- how about more complex predicates, like 
-  salary gt 10K 
- age  30 and job-codeanalyst  
- what is their selectivity?
52Selections  complex predicates
- selectivity sel(P) of predicate P  
-  fraction of tuples that qualify 
- sel(P)  SC(P)  nr
53Selections  complex predicates
- eg., assume that V(grade, TAKES)5 distinct 
 values
- simple predicate P Aconstant 
- sel(Aconstant)  1/V(A,r) 
- eg., sel(gradeB)  1/5 
- (what if V(A,r) is unknown??)
54Selections  complex predicates
- range query sel( grade gt C) 
- sel(Agta)  (Amax  a) / (Amax  Amin)
55Selections - complex predicates
- negation sel( grade ! C) 
- sel( not P)  1  sel(P) 
- (Observation selectivity  probability)
P 
 56Selections  complex predicates
- conjunction 
- sel( grade  C and course  CIS661) 
- sel(P1 and P2)  sel(P1)  sel(P2) 
- INDEPENDENCE ASSUMPTION 
57Selections  complex predicates
- disjunction 
- sel( grade  C or course  CIS661) 
- sel(P1 or P2)  sel(P1)  sel(P2)  sel(P1 and 
 P2)
-  sel(P1)  sel(P2)  sel(P1)sel(P2) 
- INDEPENDENCE ASSUMPTION, again 
58Selections  complex predicates
- disjunction in general 
- sel(P1 or P2 or  Pn)  
- 1 - (1- sel(P1) )  (1 - sel(P2) )   (1 - 
 sel(Pn))
59Selections  summary
- sel(Aconstant)  1/V(A,r) 
- sel( Agta)  (Amax  a) / (Amax  Amin) 
- sel(not P)  1  sel(P) 
- sel(P1 and P2)  sel(P1)  sel(P2) 
- sel(P1 or P2)  sel(P1)  sel(P2)  
 sel(P1)sel(P2)
- UNIFORMITY and INDEPENDENCE ASSUMPTIONS
60Q-opt steps
- bring query in internal form (eg., parse tree) 
-  into canonical form (syntactic q-opt) 
- generate alt. plans 
- selections (simple complex predicates) 
- sorting projections 
- joins 
- estimate cost pick best
61Sorting
- Assume br blocks of rel. r, and 
- only M (ltbr) buffers in main memory 
- Q1 how to sort (external sorting)? 
- Q2 cost?
62Sorting
- Q1 how to sort (external sorting)? 
- A1 
- create sorted runs of size M 
- merge
63Sorting
- create sorted runs of size M (how many?) 
- merge them (how?)
M
...
... 
 64Sorting
- create sorted runs of size M 
- merge first M-1 runs into a sorted run of 
-  (M-1) M, ...
M
..
...
... 
 65Sorting
- How many steps we need to do? 
-  i, where M(M-1)i gt br 
- How many reads/writes per step? brbr 
-  (each step reads every block once and writes it 
 once)
M
..
...
... 
 66Sorting
- In short, excluding the final write, we need 
-  ceil(log(br/M) / log(M-1))  2  br  br
M
..
...
... 
 67Q-opt steps
- bring query in internal form (eg., parse tree) 
-  into canonical form (syntactic q-opt) 
- generate alt. plans 
- selections (simple complex predicates) 
- sorting projections, aggregations 
- joins 
- estimate cost pick best
68Projection - dupl. elimination
- eg., 
- select distinct c-id 
- from TAKES 
- How? 
- Pros and cons?
69Set operations
- eg., 
- select  from REGULAR-STUDENT 
- union 
- select  from SPECIAL-STUDENT 
- How? 
- Pros and cons?
70Aggregations
- eg., 
- select ssn, avg(grade) 
-  from TAKES 
- How?
71Q-opt steps
- bring query in internal form (eg., parse tree) 
-  into canonical form (syntactic q-opt) 
- generate alt. plans 
- selections sorting projections, aggregations 
- joins 
- 2-way joins 
- n-way joins 
- estimate cost pick best
722-way joins
- output size estimation r JOIN s 
- nr, ns tuples each 
- case1 cartesian product (R, S have no common 
 attribute)
- of output tuples??
732-way joins
- output size estimation r JOIN s 
- case2 r(A,B), s(A,C,D), A is cand. key for r 
- of output tuples?? 
ltns
r(A, ...)
s(A, ......)
nr
ns 
 742-way joins
- output size estimation r JOIN s 
- case3 r(A,B), s(A,C,D), A is cand. key for 
 neither (is it possible??)
- of output tuples?? 
r(A, ...)
s(A, ......)
nr
ns 
 752-way joins
- of output tuples 
-  nr  ns/V(A,s) or ns  nr/V(A,r) 
-  (whichever is less)
76Q-opt steps
- bring query in internal form (eg., parse tree) 
-  into canonical form (syntactic q-opt) 
- generate alt. plans 
- selections sorting projections, aggregations 
- joins 
- 2-way joins - output size estimation algorithms 
- n-way joins 
- estimate cost pick best
772-way joins
- algorithm(s) for r JOIN s? 
- nr, ns tuples each
782-way joins
- Algorithm 0 (naive) nested loop (SLOW!) 
- for each tuple tr of r 
- for each tuple ts of s 
- print, if they match
792-way joins
- Algorithm 0 why is it bad? 
- how many disk accesses (br and bs are the 
 number of blocks for r and s)?
nrbs  br 
 802-way joins
- Algorithm 1 Blocked nested-loop join 
- read in a block of r 
- read in a block of s 
- print matching tuples
cost br  br  bs
r(A, ...)
s(A, ......)
nr, br
ns records, bs blocks 
 812-way joins
- Arithmetic example 
- nr  10,000 tuples, br  1,000 blocks 
- ns  1,000 tuples, bs  200 blocks
alg0 2,001,000 d.a. alg1 201,000 d.a.
r(A, ...)
s(A, ......)
10,000 1,000
1,000 records, 200 blocks 
 822-way joins
- Observation1 Algo1 asymmetric 
- cost br  br  bs - reverse roles 
- cost bs  bsbr 
- Best choice?
smallest relation in outer loop
r(A, ...)
s(A, ......)
nr, br
ns records, bs blocks 
 832-way joins
- Observation2 NOT IN BOOK 
- what if we have k buffers available? 
read in k-1 blocks of r read in a block 
of s print matching tuples
r(A, ...)
s(A, ......)
nr, br
ns records, bs blocks 
 842-way joins
br  br/(k-1)  bs
read in k-1 blocks of r read in a block 
of s print matching tuples
what if brk-1? what if we assign k-1 blocks to 
inner?)
r(A, ...)
s(A, ......)
nr, br
ns records, bs blocks 
 852-way joins
- Observation3 can we get rid of the br term? 
- cost br  br  bs 
A read the inner relation backwards half of the 
times! Q cons?
r(A, ...)
s(A, ......)
nr, br
ns records, bs blocks 
 862-way joins
- Other algorithm(s) for r JOIN s? 
- nr, ns tuples each
872-way joins - other algos
- sort-merge 
- sort r sort s merge sorted versions 
-  (good, if one or both are already sorted)
882-way joins - other algos
- sort-merge - cost 
-  2 br  log(br)  2 bs  log(bs)  br  bs 
- needs temporary space (for sorted versions) 
- gives output in sorted order 
892-way joins - other algos
- use an existing index, or even build one on the 
 fly
- cost br  nr  c (c look-up cost)
r(A, ...)
nr 
 902-way joins - other algos
- hash join 
- hash r into (0, 1, ..., max) buckets 
- hash s into buckets (same hash function) 
- join each pair of matching buckets
r(A, ...)
0
1
max 
 912-way joins - hash join details
- how to join each pair of partitions Hr-i, Hs-i ? 
- A build another hash table for Hs-i, and probe 
 (look up) it with each tuple of Hr-i
Hr-0
Hs-0
r(A, ...)
0
1
max 
 922-way joins - hash join details
- what if Hs-i is too large to fit in main-memory? 
-  A recursive partitioning 
- more details (overflows, hybrid hash joins) in 
 book
- cost of hash join? (under certain assumptions) 
-  2(br  bs)  (br  bs)  4 max
93Q-opt steps
- bring query in internal form (eg., parse tree) 
-  into canonical form (syntactic q-opt) 
- generate alt. plans 
- selections sorting projections, aggregations 
- joins 
- 2-way joins - output size estimation algorithms 
- n-way joins 
- estimate cost pick best
94n-way joins
- r1 JOIN r2 JOIN ... JOIN rn 
- typically, break problem into 2-way joins
95Structure of query optimizers
- System R 
- break query in query blocks 
- simple queries (ie., no joins) look at stats 
- n-way joins left-deep join trees ie., only one 
 intermediate result at a time
- pros smaller search space pipelining 
- cons may miss optimal 
- 2-way joins nested-loop and sort-merge
96Structure of query optimizers
- More heuristics by Oracle, Sybase and Starburst 
 (-gt DB2)  in book
- In general q-opt is very important for large 
 databases.
- (explain select ltsql-statementgt gives plan)
97Q-opt steps
- bring query in internal form (eg., parse tree) 
-  into canonical form (syntactic q-opt) 
- generate alt. plans 
- selections (simple complex predicates) 
- sorting projections 
- joins 
- estimate cost pick best