Download R i - My FIT

Document related concepts

Microsoft Jet Database Engine wikipedia , lookup

Database wikipedia , lookup

Concurrency control wikipedia , lookup

Extensible Storage Engine wikipedia , lookup

Clusterpoint wikipedia , lookup

Database model wikipedia , lookup

ContactPoint wikipedia , lookup

Relational model wikipedia , lookup

Relational algebra wikipedia , lookup

Transcript
Chapter 13: Query Processing
 Overview
 Measures of Query Cost
 Selection Operation
 Sorting
 Join Operation
 Other Operations
 Evaluation of Expressions
Database System Concepts
13.1
©Silberschatz, Korth and Sudarshan
Basic Steps in Query Processing
1. Parsing and translation
2. Optimization
3. Evaluation
Database System Concepts
13.2
©Silberschatz, Korth and Sudarshan
Parsing, Translation and Evaluation
 Parsing and translation:
 Checks syntax, verifies relations, attributes, etc.
 Translates the query into its internal form, which is then
translated into relational algebra.
 Evaluation:
 Executes the (chosen) query-evaluation plan.
 Returns results.
Database System Concepts
13.3
©Silberschatz, Korth and Sudarshan
Optimization
 Observation #1: A given relational algebra expression has many
equivalent expressions:
balance2500(balance(account))
balance(balance2500(account))
 Observation #2: Each relational algebraic operation can be
evaluated using one of several different algorithms:
 Could use an index on balance to find accounts with balance < 2500, or
perform complete relation scan and discard accounts with balance 
2500
 Thus a relational-algebra expression can be evaluated in many
ways.
Database System Concepts
13.4
©Silberschatz, Korth and Sudarshan
Optimization (Cont.)
 Annotated expression specifying detailed evaluation strategy is
called an evaluation-plan (also called a query execution plan,
query plan, etc).
 The process of Query Optimization involves choosing the
evaluation plan that has lowest “cost” from amongst all
equivalent evaluation plans.
 A cost estimate is calculated using statistical information from the
database catalog.
 Number of tuples in each relation, size of tuples, etc.
Database System Concepts
13.5
©Silberschatz, Korth and Sudarshan
Optimization (Cont.)
 Chapter 13 covers:
 How to measure query cost.
 Algorithms for individual relational algebra operations.
 How to combine algorithms for individual operations in order to
evaluate a complete expression.
 Chapter 14 covers:
 We study how to optimize queries, that is, how to find an evaluation
plan with lowest estimated cost.
Database System Concepts
13.6
©Silberschatz, Korth and Sudarshan
Measures of Query Cost
 Cost is generally defined as total elapsed time for query
execution.
 Many factors contribute to cost:
 disk accesses
 CPU time
 network communication
 Sequential vs. random I/O
 In database systems the predominant cost is typically
disk access, which are also relatively easy to estimate.
Database System Concepts
13.7
©Silberschatz, Korth and Sudarshan
Measures of Query Cost, Cont.
 Disk access time is comprised of:
 Number of disk seeks * average-seek-time
 Number of blocks read * average-block-read-time
 Number of blocks written * average-block-write-time
 Cost to write a block is greater than cost to read a block
because data is read back after being written to ensure
that the write was successful.
 For simplicity our cost measure will be a function of the
number of block transfers to/from disk, seek time tS and
block transfer time tT.
 Real DBMSs take other factors into account.
Database System Concepts
13.8
©Silberschatz, Korth and Sudarshan
Measures of Query Cost (Cont.)
 Cost depends on the size of the buffer in main memory:
 Having more memory reduces disk accesses.
 Amount of available buffer space depends on several factors, i.e.,
other concurrent processes, machine constraints, etc) and is
therefore hard to determine in the abstract:
 We often use worst case estimates, assuming only the minimum
amount of memory is available for query execution.
 Other times the authors will do average case, or a somewhat peculiar
mix of average and worst case.
 We do not include the cost to writing the final output to disk in our
cost formulae.
Database System Concepts
13.9
©Silberschatz, Korth and Sudarshan
Statistical Information
for Cost Estimation
 nr: number of tuples in a relation r.
 br: number of blocks containing tuples of r.
 sr: size of a tuple of r.
 fr: blocking factor of r — i.e., the number of tuples that fit into one
block.
 If tuples of r are stored together physically in a file, then:




nr 
br 
f r 
Database System Concepts
13.10
©Silberschatz, Korth and Sudarshan
Statistical Information
for Cost Estimation
 More generally:




nr 
br 
f r 
 tT : average transfer time
 tS : average block access time (seek plus rotational
latency)
Database System Concepts
13.11
©Silberschatz, Korth and Sudarshan
Selection Operation
 Search algorithms that perform selections without using an index are
referred to as file scans.
 Algorithm A1 (linear search): Scan each file block and test all records to
see whether they satisfy the selection condition.
 Cost estimate = tS + br * tT
• note that henceforth the term “estimate” will be assumed
For an arbitrary
predicate, this is
best, worst and
average case.
 If the selection is on a candidate key attribute, cost = tS + (br /2) * tT
 Linear search can be applied regardless of
• selection condition or
• ordering of records in the file, or
This is average case.
• availability of indices
 Note that linear search is sometimes referred to as a table scan or a file
scan, although the latter term includes other algorithms.
Database System Concepts
13.12
©Silberschatz, Korth and Sudarshan
Selection Operation (Cont.)
 A2 (binary search): Applicable if selection is an equality
comparison on the attribute on which file is ordered.
 Assume that the blocks of a relation are stored contiguously
 Cost (number of disk blocks to be scanned):
• log2(br) * (tS + tT)
• The cost of locating the first tuple using a binary search.
• Plus the number of blocks containing records that satisfy
selection condition .
– Will see how to estimate this cost in Chapter 14
Database System Concepts
13.13
©Silberschatz, Korth and Sudarshan
Selections Using Indices
 Search algorithms that use an index to perform a selection are
referred to as index scans.
 Selection condition must involve (at least part of) the search-key of
index.
 A3 (primary index on candidate key, equality): Retrieve a single
record that satisfies the corresponding equality condition.
 Cost = (HTi + 1) * (tS + tT), where HTi represents the “height” of
index i
 A4 (primary index on nonkey, equality) Retrieve multiple records.
 Records will be on consecutive blocks.
 Cost = HTi * (tS + tT) + tS + b * tT, where b is the number of blocks
containing retrieved records.
Database System Concepts
13.14
©Silberschatz, Korth and Sudarshan
Selections Using Indices, Cont.
 A5 (equality on search-key of secondary index).
 Retrieve a single record if the search-key is a candidate key.
• Cost = (HTi + 1) * (tS + tT),
 Retrieve multiple records if search-key is not a candidate key.
• Cost = (HTi + n) * (tS + tT), where n is the number of records
retrieved
– The book does not include block reads for the bucket.
• Worst case - assumes each record is on a different block.
Database System Concepts
13.15
©Silberschatz, Korth and Sudarshan
Selections Involving Comparisons
 Can implement selections of the form AV (r) or A  V(r) by using
 File Scan - linear or binary search (if sorted).
 Index Scan - using indices as specified in the following.
 A6 (primary index, comparison).
•
A  V(r) use index to find first tuple  v and scan sequentially from there.
• AV (r) scan relation sequentially until first tuple > v; do not use index.
 A7 (secondary index, comparison).
•
A  V(r) use index to find first index entry  v and scan index sequentially
from there, to find pointers to records.
• AV (r) scan leaf pages of index using pointers to records, until reaching first
entry > v.
• Either case requires an I/O for each record, worst case.
Database System Concepts
13.16
©Silberschatz, Korth and Sudarshan
Implementation of Complex Selections
 Conjunction:
1 2. . . n(r)
 A8 (conjunctive selection using one index).
 Select one of the conditions i and algorithms A1 through A7 that results in
the least cost for i (r).
 Test other conditions on tuples after fetching them into the buffer.
 A9 (conjunctive selection using multiple-key index).
 Use appropriate composite (multiple-key) index if available.
 A10 (conjunctive selection by intersection of identifiers).
 Requires indices with record pointers.
 Use corresponding index for each condition, and take intersection of all the
obtained sets of record pointers, and then fetch records from data file.
 If some conditions do not have appropriate indices, apply test in memory.
Database System Concepts
13.17
©Silberschatz, Korth and Sudarshan
Algorithms for Complex Selections
 Disjunction:1 2 .
. . n (r).
 A11 (disjunctive selection by union of identifiers).
 Use corresponding index for each condition, and take union of all the
obtained sets of record pointers, and then fetch records from data file.
 Applicable only if all conditions have available indices.
• Otherwise use linear scan.
• Could sort pointers before retrieving records.
 Negation:
(r)
 Use linear search.
 If very few records satisfy , and an index is applicable to , find
satisfying records using leaf-level of index and fetch from the data file.
Database System Concepts
13.18
©Silberschatz, Korth and Sudarshan
Sorting
 Option #1: Use an existing applicable ordered index (e.g., B+
tree) to read the relation in sorted order.
 Option #2: Build an index on the relation, and then use the index
to read the relation in sorted order.
 Option #3: For relations that fit in memory, techniques like quick-
sort can be used.
 Option #4: For relations that don’t fit in memory, external
sort-merge is a good choice.
Database System Concepts
13.19
©Silberschatz, Korth and Sudarshan
External Sort-Merge
Let M denote memory size (in blocks).
1. Create sorted runs:
Let i be 0 initially.
Repeat until the end of the relation:
(a) Read M blocks of relation into memory
(b) Sort the in-memory blocks
(c) Write sorted data to run Ri;
(d) i = i + 1;
Let the final value of i be denoted by N;
The end result is N runs, numbered 0 through N-1, where each run, except
the last, contains M blocks.
Database System Concepts
13.20
©Silberschatz, Korth and Sudarshan
External Sort-Merge, Cont.
2. Merge the runs (N-way merge):
// We assume (for now) that N < M.
// Use N blocks of memory to buffer input runs, and 1 block to buffer output.
Read the first block of each run into its buffer block;
repeat
Select the first record (in sort order) among all buffer blocks;
Write the record to the output buffer block;
If the output buffer block is full then write it to disk;
Delete the record from its input buffer block;
If the buffer block becomes empty then
read the next block (if any) of the run into the buffer;
until all input buffer blocks are empty;
Database System Concepts
13.21
©Silberschatz, Korth and Sudarshan
External Sort-Merge, Cont.
Original Table
• on disk
Sorted Runs
• on disk
• each has M blocks
Buffer
• Runs are merged
block at a time
Final Sorted Table
• on disk
Sort
R0
Sort
R1
Sort
R2
Sort
RN-1
Output block
Database System Concepts
13.22
©Silberschatz, Korth and Sudarshan
External Sort-Merge, Cont.
 If N  M, several merge passes are required.
 In each pass, contiguous groups of M - 1 runs are merged.
 A pass reduces the number of runs by a factor of M -1, and
creates runs longer by the same factor.
• E.g. If M=11, and there are 90 runs, one pass reduces
the number of runs to 9, each 10 times the size of the
initial runs.
 Repeated passes are performed till all runs have been
merged into one.
Database System Concepts
13.23
©Silberschatz, Korth and Sudarshan
Example: External Sorting Using Sort-Merge
M=3
R0
R1
R2
R3
Database System Concepts
13.24
©Silberschatz, Korth and Sudarshan
External Merge Sort (Cont.)
 Cost analysis:
 Total number of merge passes required: logM–1(br/M).
 Disk accesses for initial run creation as well as in each pass is 2br
• For final pass, we ignore final write cost for all operations since
the output of an operation may be sent to the parent operation
without being written to disk
Thus total number of disk accesses for external sorting:
br ( 2 logM–1(br / M) + 1)
Database System Concepts
13.25
©Silberschatz, Korth and Sudarshan
Join Operation
 Algorithms for implementing joins:






Nested-loop join
Block nested-loop join
Indexed nested-loop join
Merge-join
Hash-join
Various versions of the above
 Choice of algorithm is based on cost estimate.
 Examples use the following information:
 customer: 10,000 rows, 400 blocks
 depositor: 5000 rows, 100 blocks
Database System Concepts
13.26
©Silberschatz, Korth and Sudarshan
Nested-Loop Join
 To compute the theta join r

s
for each tuple tr in r do begin
for each tuple ts in s do begin
test pair (tr,ts) to see if they satisfy the join condition 
if they do, add tr • ts to the result.
end;
end;
 r is the outer relation and s the inner relation.
 Does not use or require indices.
 Can be used with any kind of join condition.
 Expensive - examines every pair of tuples in the two relations.
Database System Concepts
13.27
©Silberschatz, Korth and Sudarshan
Nested-Loop Join (Cont.)
 In the worst case, if there is enough memory only to hold one block of
each relation, the number of disk accesses is:
nr  bs + br
 If both relations fit entirely in memory.
 Best case: br + bs
 If only the smaller of the two relations fits entirely in memory then use that as
the inner relation and the bound still holds.
 Assuming worst case:
 5000  400 + 100 = 2,000,100 with depositor as outer relation.
 10000  100 + 400 = 1,000,400 with customer as the outer relation.
 Assuming best case:
 400 + 100 = 500
 or even if one relation fits entirely in memory
Database System Concepts
13.28
©Silberschatz, Korth and Sudarshan
Block Nested-Loop Join
 Embellished version of nested-loop join:
for each block Br of r do begin
for each block Bs of s do begin
for each tuple tr in Br do begin
for each tuple ts in Bs do begin
Check if (tr,ts) satisfy the join condition
if they do, add tr • ts to the result.
end;
end;
end;
end;
Database System Concepts
13.29
©Silberschatz, Korth and Sudarshan
Block Nested-Loop Join (Cont.)
 Worst case occurs when there are just two blocks for input, in which
case the number of block accesses is: br  bs + br
 Best case: br + bs
 Assuming worst case:
 100 * 400 + 100 = 40,100 (depositor as the outer relation)
 400 * 100 + 400 = 40,400 (customer as the outer relation)
 Assuming best case:
 400 + 100 = 500 (same as with nested-loop join)
 When would a nested-loop join be preferable?
 When a sorted result is required (for an outer operation)
Database System Concepts
13.30
©Silberschatz, Korth and Sudarshan
Improvements to Nested-Loop
and Block Nested-Loop Algorithms
 Use a block nested-loop, but with modifications:
 Use M - 2 disk blocks as the blocking unit for the outer relation,
where M = memory size in blocks
 Use one buffer block to buffer the inner relation
 Use one buffer block to buffer the output
• Worst case: br / (M-2)  bs + br
• Best case is still the same: bs + br
 If the join is an equi-join, and the join attribute is a candidate
key on the inner relation, then stop inner loop on first match.
 Scan inner loop forward and backward alternately, to make use
of the blocks remaining in buffer (with LRU replacement).
Database System Concepts
13.31
©Silberschatz, Korth and Sudarshan
Indexed Nested-Loop Join
 Index scans can replace file scans if:
 the join is an equi-join or natural join, and
 an index is available on the inner relation’s join attribute
 For each tuple tr in the outer relation r, use the index to look up
tuples in s that satisfy the join condition with tuple tr.
 In the worst case the buffer has space for only one block of r and
one block of the index for s.
Worst case will assume index blocks
are not in buffer, best case will assume
that some are (perhaps close to br+bs
if index is pinned in buffer?)
 Worst case: br + nr  c
 Where c is the cost to search the index and retrieve all matching
tuples for each tuple or r
Database System Concepts
13.32
©Silberschatz, Korth and Sudarshan
Indexed Nested-Loop Join, Cont.
 Other Options:
 If a supporting index does not exist than it can be constructed
“on-the-fly.”
 If indices are available on the join attributes of both r and s,
then use the relation with fewer tuples as the outer relation.
 Or perhaps use the relation which has a primary index on it as the
inner relation…
Database System Concepts
13.33
©Silberschatz, Korth and Sudarshan
Example of Index
Nested-Loop Join Costs
 Compute depositor
customer, with depositor as the outer
relation.
 Suppose customer has a primary B+-tree index on customer-
name, which contains 20 entries in each index node.
 Since customer has 10,000 tuples, the height of the tree is 4, and
one more access is needed to find the actual data.
 Recall that depositor has 5000 tuples
Worst case
 Cost of indexed nested loops join:
 100 + 5000 * 5 = 25,100 disk accesses.
Database System Concepts
13.34
©Silberschatz, Korth and Sudarshan
Merge-Join

Applicable for equi-joins and natural joins.
Sort both relations on their join attribute (if not already sorted).
2. Merge the sorted relations to join them
1.
 Join step is similar to the merge stage of the sort-merge algorithm.
 Main difference is in how duplicate values in join attribute are treated — every
pair with same value on join attribute must be matched
 Detailed algorithm is in the book (see page 546)
Database System Concepts
13.35
©Silberschatz, Korth and Sudarshan
Merge-Join (Cont.)
 Can be used only for equi-joins and natural joins
 Worst case number of block accesses:
 Each block needs to be read only once (assuming all tuples for any
given value of the join attributes fit in memory)
 Thus number of block accesses for merge-join is
br + bs + the cost of sorting if relations are unsorted.
Database System Concepts
13.36
©Silberschatz, Korth and Sudarshan
Hybrid Merge-Join
 Applicable if:
 Join is an equi-join or a natural join
 One relation is sorted
 The other has a secondary B+-tree index on the join attribute
 Algorithm Outline:
 Merge the sorted relation with the leaf entries of the B+-tree.
 Sort the result on the addresses of the unsorted relation’s tuples.
 Scan the unsorted relation in physical address order and merge with
previous result, to replace addresses by the actual tuples.
• Sequential scan more efficient than random lookup.
• Not really a “scan” of the whole relation.
Database System Concepts
13.37
©Silberschatz, Korth and Sudarshan
Hash-Join
 Applicable for equi-joins and natural joins.
 Let h be a hash function mapping JoinAttrs to {0, 1, ..., n-1}.
 h is used to partition tuples of both relations:
 The tuples from r are partitioned into r0, r1, . . ., rn-1
• Each tuple tr
 r is put in partition ri where i = h(tr [JoinAttrs]).
 The tuples from s are partitioned into s0,, s1. . ., sn-1
• Each tuple ts s is put in partition si, where i = h(ts [JoinAttrs]).
*Note that the book uses slightly different notation.
Database System Concepts
13.38
©Silberschatz, Korth and Sudarshan
Hash-Join (Cont.)
 Tuples in ri need only to be compared with tuples in si:
 An r tuple and an s tuple that satisfy the join condition
will have the same value for the join attributes.
 If that value is hashed to some value i, the r tuple has to
be in ri and the s tuple in si.
Database System Concepts
13.39
©Silberschatz, Korth and Sudarshan
Hash-Join Algorithm
The hash-join of r and s is computed as follows.
1.
Partition the relation s using hashing function h.
// When partitioning a relation, one block of memory is used as output for
// each partition, and one block is used for input.
2.
Partition r similarly.
3.
For each i:
A simplified version of the algorithm would
simply read si into memory (the buffer), and
then read in tuples from ri, one at a time.
(a) Load si into memory and build an in-memory hash index on it using the
join attribute.
// This hash index uses a different hash function than the earlier one
h.
(b) Read the tuples in ri from the disk one by one (block at a time).
- For each tuple tr locate each matching tuple ts in si using the inmemory hash index.
- Output the concatenation of their attributes.
Relation s is called the build relation and r is called the
probe relation.
Database System Concepts
13.40
©Silberschatz, Korth and Sudarshan
Hash-Join algorithm (Cont.)
 The value n (the number of partitions) and the hash function h
is chosen such that each si should fit in memory.
 Typically n is chosen as bs/M * f where f is a “fudge factor”,
typically around 1.2
 The probe relation partitions ri need not fit in memory
 Average size of a partition si will be just less than M blocks
using the above formula for n, thereby allowing room for the
index.
Database System Concepts
13.41
©Silberschatz, Korth and Sudarshan
Hash-Join algorithm (Cont.)
 If the build relation s is very large, then the value of n given by
the above formula may be greater than M-1.
 The number of buckets is > the number of buffer pages.
 In such a case, the relation s can be recursively partitioned:
 Instead of partitioning n ways, use M – 1 partitions for s
 Further partition the M – 1 partitions using a different hash
function
 Use same partitioning method on r
 Rarely required: e.g., recursive partitioning not needed for
relations of 1GB or less with memory size of 2MB, with block size
of 4KB.
In order to avoid recursive partitioning we must have:
M > bs/M * f
which roughly simplifies to:
M > square root of bs
Database System Concepts
13.42
©Silberschatz, Korth and Sudarshan
Cost of Hash-Join
 If recursive partitioning is not required: cost of hash join is
3(br + bs) + 4  n
 If recursive partitioning is required, the number of passes
required for partitioning s is:
logM–1(bs) – 1
 The number of partitions of r is the same as for s.
 The number of passes for partitioning of r is the same as for s.
 Worst case: (ignoring partially filled blocks):
2(br + bs)logM–1(bs) – 1 + br + bs
Database System Concepts
13.43
©Silberschatz, Korth and Sudarshan
Cost of Hash-Join, Cont.
 Because of the inner term in this expression, it is best to choose
the smaller relation as the build relation.
 If the smaller relation can fit in main memory, it can be used as
the build relation and n can be set to 1 and the algorithm does
not partition the relations into temporary files, but may still build
an in-memory index.
 Cost estimate goes down to br + bs.
Database System Concepts
13.44
©Silberschatz, Korth and Sudarshan
Handling of Overflows
 Even if s is recursively partitioned hash-table overflow can occur,
i.e., some partition si may not fit in memory.
 Many tuples in s with same value for join attributes
 Bad hash function
 Partitioning is said to be skewed if some partitions have
significantly more tuples than some others.
Database System Concepts
13.45
©Silberschatz, Korth and Sudarshan
Handling of Overflows, Cont.
 Overflows can be handed in a variety of ways:
 Resolution (during the build phase):
• Partition si is further partitioned using different hash function.
• Partition ri must be similarly partitioned.
 Avoidance (during build phase):
• Partition build relation into many partitions, then combine them
 Most such approaches fail with large numbers of duplicates:
 Another option is to use block nested-loop join on overflowed
partitions.
Database System Concepts
13.46
©Silberschatz, Korth and Sudarshan
Example of Cost of Hash-Join
customer
depositor
 Assume that memory size is 20 blocks
 bdepositor= 100 and bcustomer = 400.
 depositor is used as build input:
 Partitioned into five (bdepositor/M) partitions, each of size 20 blocks.
 This partitioning can be done in one pass.
 customer is used as the probe input:
 Partitioned into five partitions, each of size 80.
 This is also done in one pass.
 Therefore total cost: 3(100 + 400) = 1500 block transfers
 Ignores cost of writing partially filled blocks
Database System Concepts
13.47
©Silberschatz, Korth and Sudarshan
Hybrid Hash–Join
 Useful when memory sized are relatively large, and the build input
is bigger than memory.
 Hybrid hash join keeps the first partition of the build relation in
memory.
 Can be generalized beyond what is described here.
 Keep the first two partitions in memory, if possible.
Database System Concepts
13.48
©Silberschatz, Korth and Sudarshan
Hybrid Hash–Join, Cont.
 With memory size of 25 blocks, depositor can be partitioned into five
partitions, each consisting of 20 blocks.
 Division of memory (during partitioning):
 1 block is used for input, and 1 block each for buffering 4 of the partitions.
 The 5th partition is maintained in the remaining 20 blocks of the buffer.
 Customer is similarly partitioned into five partitions each of size 80; the first
is used right away for probing, instead of being written out and read back.
 Cost of 3(80 + 320) + 20 + 80 = 1300 block transfers for
hybrid hash join, instead of 1500 with plain hash-join.
 Hybrid hash-join most useful if M >>
Database System Concepts
13.49
bs
©Silberschatz, Korth and Sudarshan
Complex Joins
 Join with a conjunctive condition:
r
1 2...  n
s
 Use either nested loop or block nested loop join.
 Compute the result of one of the simpler joins r i s
• final result comprises those tuples in the intermediate result
that satisfy the remaining conditions
1  . . .  i –1  i +1  . . .  n
 Join with a disjunctive condition:
r
1  2 ...  n s
 Use either nested loop or block nested loop join.
 Compute as the union of the records in individual joins r
(r
1 s)  (r
2 s)  . . .  (r
n s)
Database System Concepts
13.50
 i s:
©Silberschatz, Korth and Sudarshan
Other Operations
 Duplicate elimination:
 Sorting - duplicates will come adjacent to each other, and all
but one set of duplicates can be deleted.
Optimization: duplicates can be deleted during run generation
as well as at intermediate merge steps in external sort-merge.
 Hashing - similarly, duplicates will end up in the same bucket.
 Projection:
 Perform projection on each tuple followed by duplicate
elimination.
 Use the leaf-level of a B+ tree to extract required attributes.
Database System Concepts
13.51
©Silberschatz, Korth and Sudarshan
Other Operations, Cont.
 Aggregation: (implemented similar to duplicate elimination)
 Sorting or hashing can be used to bring tuples in the same group
together, and then aggregate functions can be applied on each group.
Optimization: combine tuples in the same group during run generation
and intermediate merges, by computing partial aggregate values.
Database System Concepts
13.52
©Silberschatz, Korth and Sudarshan
Other Operations, Cont.
 Set operations (,  and ): use a variant of
merge-join after sorting, or a variant of hash-join.
 Hashing:
1. Partition both relations using the same hash function,
thereby creating r0, .., rn-1 and s0,.., sn-1
2. For each partition i build an in-memory hash index on ri
(using a different hash function) after it is brought into
memory.
3. – r  s: Add tuples in si to the hash index if they are not
already in it. Tuples in the hash index comprise the result.
– r  s: Output tuples in si to the result if they are already
there in the hash index.
– r – s: For each tuple in si, if it appears in the hash index,
delete it. At end of si add remaining tuples in the hash
index to the result.
Database System Concepts
13.53
©Silberschatz, Korth and Sudarshan
Other Operations, Cont.
 Outer join can be computed either as
 A join followed by addition of null-padded non-participating tuples.
 By modifying the join algorithms.
 Modifying merge join to compute r
s
 Modify merge-join to compute r
s: During merging, for every
tuple tr from r that does not match any tuple in s, output tr padded
with nulls.
 Right outer-join and full outer-join can be computed similarly.
 Modifying hash join to compute r
s
 If r is probe relation, output non-matching r tuples padded with nulls
 If r is build relation, when probing keep track of which
r tuples matched s tuples. At end of si output
non-matched r tuples padded with nulls
Database System Concepts
13.54
©Silberschatz, Korth and Sudarshan
Evaluation of Expressions
 So far we have seen algorithms for individual operations.
 Alternatives for evaluating an entire expression:
 Materialization: Evaluate a relational algebraic expression from the
bottom-up, explicitly generating and storing the results of each
operation.
 Pipelining: Evaluate operations in a multi-threaded manner, i.e.,
pass tuples resulting from one operation to the next (parent), as
input, while the first operation is still being executed.
Database System Concepts
13.55
©Silberschatz, Korth and Sudarshan
Materialization

Example:

In a (completely) materialized evaluation, the expression
 balance2500 (account )
would be computed and stored explicitly. The join with customer would then be
computed and store explicitly. Finally the projection onto customer-name would be
computed.
Database System Concepts
13.56
©Silberschatz, Korth and Sudarshan
Materialization
 Materialized evaluation is always possible.
 Cost of writing/reading results to/from disk can be quite high:
 Until now, cost formulas for operations ignored cost of
output.
Database System Concepts
13.57
©Silberschatz, Korth and Sudarshan
Pipelining
 Evaluate several operations simultaneously in a multi-threaded manner,
passing the results of one operation to the next.
 In the previous example, don’t store (materialize) result of:
 balance 2500 (account )
 Instead, pass tuples directly to the join.
 Similarly, don’t store result of join, pass tuples directly to projection.
 Pipelining may not always be possible or easy:
 sort, hash-join.
 Pipelines can be demand driven or producer driven.
Database System Concepts
13.58
©Silberschatz, Korth and Sudarshan
Pipelining (Cont.)
 In demand driven or lazy evaluation:
 System repeatedly requests a tuple from the top-level operation.
 Each operation requests tuples from child operations as required, in order
to output its next tuple.
 In between calls, each operation has to maintain “state” so it knows what
to return next.
 In produce-driven or eager evaluation:
 Operators produce tuples automatically and pass them to their parent:
• A buffer is maintained between operators; the child puts tuples in the
buffer, and the parent removes tuples from the buffer.
• If a buffer is full, the child waits until there is space, and then generates
more tuples.
 The system schedules operations that have space in their output buffer
and can process more input tuples.
Database System Concepts
13.59
©Silberschatz, Korth and Sudarshan
Complex Joins
 Join involving three relations: loan
 Strategy 1. Compute borrower
loan
(borrower
borrower
customer
customer; use result to compute
customer)
 Strategy 2. Computer loan
borrower first, and then join the
result with customer.
 Strategy 3. Perform the two joins at once:
 Build an index on loan for loan-number, and on customer for customername.
 For each tuple t in borrower, look up the corresponding tuples in
customer and the corresponding tuples in loan.
 Each tuple of borrower is examined exactly once.
Database System Concepts
13.60
©Silberschatz, Korth and Sudarshan