36
CSCI 5708: Query Processing II CSCI 5708: Query Processing II Pusheng Zhang University of Minnesota Email: [email protected] Feb 5, 2004

CSCI 5708: Query Processing II

Embed Size (px)

DESCRIPTION

CSCI 5708: Query Processing II. Pusheng Zhang University of Minnesota Email: [email protected] Feb 5, 2004. Outline. Strategies for relational operations Select Operation Join Operation Other Operations Evaluation of Expressions External Sorting. Join Operation. - PowerPoint PPT Presentation

Citation preview

Page 1: CSCI 5708: Query Processing II

CSCI 5708: Query Processing IICSCI 5708: Query Processing II

Pusheng Zhang

University of Minnesota

Email: [email protected]

Feb 5, 2004

Page 2: CSCI 5708: Query Processing II

15.2CSCI 5708, Spring 2004. University of Minnesota

OutlineOutline

Strategies for relational operations Select Operation

Join Operation

Other Operations

Evaluation of Expressions

External Sorting

Page 3: CSCI 5708: Query Processing II

15.3CSCI 5708, Spring 2004. University of Minnesota

Join OperationJoin Operation Several different algorithms to implement joins

Nested-loop join Block nested-loop join Indexed nested-loop join Sort-Merge join Hash join

Choice based on cost estimate We do not include cost to writing output to disk in our cost

formulae

(bs * br * join selectivity)/ bfr Examples use the following information

Number of records of DEPARTMENT: 50 EMPLOYEE: 6,000 Number of blocks of DEPARTMENT: 10 EMPLOYEE: 2000

Page 4: CSCI 5708: Query Processing II

15.4CSCI 5708, Spring 2004. University of Minnesota

Nested-Loop JoinNested-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.

endend

r is called the outer relation and s the inner relation of the join.

Requires no indices and can be used with any kind of join condition.

Expensive since it examines every pair of tuples in the two relations.

Page 5: CSCI 5708: Query Processing II

15.5CSCI 5708, Spring 2004. University of Minnesota

Nested-Loop Join (Cont.)Nested-Loop Join (Cont.) In the worst case, if there is enough memory only to hold one

block of each relation, the estimated cost is

nr bs + br disk accesses.

If the smaller relation fits entirely in memory, use that as the inner relation. Reduces cost to br + bs disk accesses.

For example:

nDEP = 50, bDEP = 10, nEMP = 6000, bEMP =2000

DEPARTMENT as outer relation: 50 * 2,000 + 10 = 100,010

EMPLOYEE as the outer relation:6,000 * 50 + 2,000 = 302,000

use the relation with fewer tuples as the outer relation.

If DEPARTMENT fits entirely in memory, the cost estimate will be 10+2000 = 2010 disk accesses.

Block nested-loops algorithm (next slide) is preferable.

Page 6: CSCI 5708: Query Processing II

15.6CSCI 5708, Spring 2004. University of Minnesota

Block Nested-Loop JoinBlock Nested-Loop Join Variant of nested-loop join in which every block of inner

relation is paired with every block of outer relation.

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.

endend

endend

Page 7: CSCI 5708: Query Processing II

15.7CSCI 5708, Spring 2004. University of Minnesota

Block Nested-Loop Join (Cont.)Block Nested-Loop Join (Cont.) Worst case estimate: br bs + br block accesses.

Each block in the inner relation s is read once for each block in the outer relation (instead of once for each tuple in the outer relation

Best case: br + bs block accesses.

Page 8: CSCI 5708: Query Processing II

15.8CSCI 5708, Spring 2004. University of Minnesota

Block Nested-Loop Join (Cont.)Block Nested-Loop Join (Cont.)

What happens if number of buffer blocks > 3?e.g., M = 5

DiskDisk

r and s

r

s

idle

idle

output

Page 9: CSCI 5708: Query Processing II

15.9CSCI 5708, Spring 2004. University of Minnesota

Block Nested-Loop Join (Cont.)Block Nested-Loop Join (Cont.)

DiskDisk

r and s

r

s

output

Page 10: CSCI 5708: Query Processing II

15.10CSCI 5708, Spring 2004. University of Minnesota

Improvements Improvements Improvement on Buffer Use

M = memory size in blocks

use M - 2 disk blocks as blocking unit for outer relations

use one block for inner relations

use one block for output

Cost = br / (M-2) bs + br

Other Improvements If equi-join attribute forms a key on inner relation, 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)

Use index on inner relation if available (next slide)

Page 11: CSCI 5708: Query Processing II

15.11CSCI 5708, Spring 2004. University of Minnesota

Example of Block Nested-LoopExample of Block Nested-Loop r s: Cost = br / (M-2) bs + br For example: DEPARTMENT and EMPLOYEE

bDEP = 10, bEMP =2000

Let M = 5

with EMPLOYEE as the outer relation

2000 / 3 * 10 + 2000 = 6670 + 2000 = 8670

with DEPARTMENT as outer relation

10 / 3 * 2000 + 10 = 4*2000 + 10= 8010

use the relation with fewer blocks as the outer relation

Page 12: CSCI 5708: Query Processing II

15.12CSCI 5708, Spring 2004. University of Minnesota

Indexed Nested-Loop JoinIndexed Nested-Loop Join Index lookups can replace file scans if

join is an equi-join or natural join and an index is available on the inner relation’s join attribute

Can construct an index just to compute a join.

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.

Worst case: buffer has space for only one page of r, and, for each tuple in r, we perform an index lookup on s.

Cost of the join: br + nr c Where c is the cost of traversing index and fetching all matching s

tuples for one tuple or r c can be estimated as cost of a single selection on s using the join

condition.

If indices are available on join attributes of both r and s,use the relation with fewer tuples as the outer relation.

Page 13: CSCI 5708: Query Processing II

15.13CSCI 5708, Spring 2004. University of Minnesota

Example of Nested-Loop Join CostsExample of Nested-Loop Join Costs r s: br + nr c

For example: DEPARTMENT MGRSSN = SSN EMPLOYEE

nDEP = 50, bDEP = 10, nEMP = 6,000, bEMP =2,000

Suppose that secondary indexes exist on both SSN of EMPLOYEE and MGRSSN of DEPARTMENT

The number of index levels xSSN = 4 and xMGRSSN = 2

Cost of indexed nested loops join

with EMPLOYEE as the outer relation

Cost = 2,000 + 6,000 * (2+1) = 2,000 + 18,000= 20,000

with DEPARTMENT as the outer relation

Cost = 10 + (50 * 5) = 10 + 250 = 260

Page 14: CSCI 5708: Query Processing II

15.14CSCI 5708, Spring 2004. University of Minnesota

Merge-JoinMerge-Join1. Sort both relations on their join attribute (if not already sorted on the join

attributes): Physically sorted

2. Merge the sorted relations to join them Copy Pair of Blocks of r and s into memory buffers Let r(i) for ith record in r and s(j) for jth record in s Let Pr(r) and Pr(s) be pointers Let i = 1, j= 1 If r(i)[a1] > s(j)[a1]

pr(s) ++;

else if r(i)[a1] > s(j)[a1]

pr(r)++;

else // equality

output <r(i), s(j)>

check <r(i+1), s(j)> …

check <r(i), s(j+1)> …

pr(s)++; pr(r)++;

end;

end

Page 15: CSCI 5708: Query Processing II

15.15CSCI 5708, Spring 2004. University of Minnesota

Merge-Join (Cont.)Merge-Join (Cont.) Can be used only for equi-joins and natural joins

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.

This strategy is very efficient when the records of r and s are physically sorted by the values of join attributes.

Page 16: CSCI 5708: Query Processing II

15.16CSCI 5708, Spring 2004. University of Minnesota

Hash-JoinHash-Join Applicable for equi-joins and natural joins.

A hash function h is used to partition tuples of BOTH relations

h maps JoinAttrs values to {0, 1, ..., n}, where JoinAttrs denotes the common attributes of r and s used in the natural join.

r0, r1, . . ., rn denote partitions of r tuples

Each tuple tr r is put in partition ri where i = h(tr [JoinAttrs]).

r0,, r1. . ., rn denotes partitions of s tuples

Each tuple ts s is put in partition si, where i = h(ts [JoinAttrs]).

Page 17: CSCI 5708: Query Processing II

15.17CSCI 5708, Spring 2004. University of Minnesota

Hash-Join (Cont.)Hash-Join (Cont.)

Page 18: CSCI 5708: Query Processing II

15.18CSCI 5708, Spring 2004. University of Minnesota

Hash-Join (Cont.)Hash-Join (Cont.)

r tuples in ri need only to be compared with s tuples in si

Need not be compared with s tuples in any other partition, since: 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.

Page 19: CSCI 5708: Query Processing II

15.19CSCI 5708, Spring 2004. University of Minnesota

Hash-Join AlgorithmHash-Join Algorithm

1. Partition the relation r using hashing function h. When partitioning a relation, one block of memory is reserved as the output buffer for each partition.

2. Partition s similarly.

3. For each i:

(a)Load ri 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 si from the disk one by one. For each tuple ts locate each matching tuple tr in rj using the in-memory hash index. Output the concatenation of their attributes.

The hash-join of r and s is computed as follows.

Relation r is called the build input and s is called the probe input.

Page 20: CSCI 5708: Query Processing II

15.20CSCI 5708, Spring 2004. University of Minnesota

Hash-Join algorithm (Cont.)Hash-Join algorithm (Cont.) The value n and the hash function h is chosen such that each

ri should fit in memory.

it is best to choose the smaller relation as the build relation.

Partition Hash Join instead of partitioning n ways, use M – 1 partitions for r

One block buffer for input

Whenever a buffer for a partition gets filled, store the partition

Further partition the M – 1 partitions using a different hash function if applicable

Use same partitioning method on r and s

Recursive partitioning is rarely required given large memory

Page 21: CSCI 5708: Query Processing II

15.21CSCI 5708, Spring 2004. University of Minnesota

Handling of OverflowsHandling of Overflows Hash-table overflow occurs in partition ri if ri does not fit in

memory. Reasons could be Many tuples in r with same value for join attributes

Bad hash function

Partitioning is said to be skewed/nonuniform if some partitions have significantly more tuples than some others

Overflow resolution can be done in partitioning phase

Partition ri is further partitioned using different hash function.

Partition si must be similarly partitioned.

Challenge with large numbers of duplicates Fallback option: use block nested loops join on overflowed

partitions

Page 22: CSCI 5708: Query Processing II

15.22CSCI 5708, Spring 2004. University of Minnesota

Cost of Hash-JoinCost of Hash-Join If recursive partitioning is not required: cost of hash join is

3(br + bs)

Each record is read once and written once in partitioning phase

Each record is read a second time to perform join in probing phase

When one relation can fit into memory buffer. No need for partitioning

Nested-loop join based on hashing and probing

Cost estimate goes down to br + bs

For example:

Whole DEPARTMENT can be read into memory and organized into a hash table on the join attribute

Each EMPLOYEE block is then read into buffer and each EMPLOYEE record in the buffer is hashed on its join attribute

Probe the corresponding in-memory bucket

Page 23: CSCI 5708: Query Processing II

15.23CSCI 5708, Spring 2004. University of Minnesota

Hybrid Hash–JoinHybrid Hash–Join Useful when memory sized are relatively large, and the build input is

bigger than memory. Main feature of hybrid hash join:

Keep the first partition of the build relation r in memory. Where the join phase for the first partition is included in the partitioning

phase For example

First partition of DEPARTMENT is wholly in main memory Other partitions of DEPARTMENT reside in disk EMPLOYEE are partitioned. If a record hashes to the first partition, it is

joined with the matching records Goal: to join as many records during partitioning phase so as to save the cost

of storing those records back to disk and rereading them a second time for probing phase

In general, hybrid hash join is a good choice when both files have no good search structures

Page 24: CSCI 5708: Query Processing II

15.24CSCI 5708, Spring 2004. University of Minnesota

Complex JoinsComplex Joins Join with a conjunctive condition:

r 1 2... n s

Either use nested loops/block nested loops, or

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

Either use nested loops/block nested loops, or

Compute as the union of the records in individual joins r i s:

(r 1 s) (r 2 s) . . . (r n s)

Page 25: CSCI 5708: Query Processing II

15.25CSCI 5708, Spring 2004. University of Minnesota

Other OperationsOther Operations

Duplicate elimination can be implemented via hashing or sorting. On 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 is similar – duplicates will come into the same bucket.

Projection is implemented by performing projection on each tuple followed by duplicate elimination.

Page 26: CSCI 5708: Query Processing II

15.26CSCI 5708, Spring 2004. University of Minnesota

Other Operations : AggregationOther Operations : Aggregation Aggregation can be implemented in a manner similar to

duplicate elimination. Sorting or hashing can be used to bring tuples in the same group

together, and then the 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

For count, min, max, sum: keep aggregate values on tuples found so far in the group.

– When combining partial aggregate for count, add up the aggregates

For avg, keep sum and count, and divide sum by count at the end

Page 27: CSCI 5708: Query Processing II

15.27CSCI 5708, Spring 2004. University of Minnesota

Other Operations : Set OperationsOther Operations : Set Operations Set operations (, and ): can either use variant of

merge-join after sorting, or variant of hash-join.

E.g., Set operations using hashing:

1. Partition both relations using the same hash function, thereby creating, r1, .., rn r0, and s1, s2.., sn

2. Process each partition i as follows. Using a different hashing function, build an in-memory hash index on ri after it is brought into memory.

3. – r s: Add tuples in si to the hash index if they are not already in it. At end of si add the tuples in the hash index to 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 is there in the hash index, delete it from the index. At end of si add remaining tuples in the hash index to the result.

Page 28: CSCI 5708: Query Processing II

15.28CSCI 5708, Spring 2004. University of Minnesota

Other Operations : Outer JoinOther Operations : Outer Join 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

In r s, non participating tuples are those in r – R(r s)

Modify merge-join to compute r s: During merging, for every tuple tr from r that do 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

Page 29: CSCI 5708: Query Processing II

15.29CSCI 5708, Spring 2004. University of Minnesota

Evaluation of ExpressionsEvaluation of Expressions So far: we have seen algorithms for individual operations

Alternatives for evaluating an entire expression tree Materialization: generate results of an expression whose inputs

are relations or are already computed, materialize (store) it on disk. Repeat.

Pipelining: pass on tuples to parent operations even as an operation is being executed

We study above alternatives in more detail

Page 30: CSCI 5708: Query Processing II

15.30CSCI 5708, Spring 2004. University of Minnesota

MaterializationMaterialization Materialized evaluation: evaluate one operation at a time,

starting at the lowest-level. Use intermediate results materialized into temporary relations to evaluate next-level operations.

E.g. SALARY < 50K ( SALARY (EMPLOYEE))

Store the intermediate relation SALARY (EMPLOYEE)

Materialized evaluation is always applicable

Cost of writing results to disk and reading them back can be quite high Our cost formulas for operations ignore cost of writing results to

disk, so

Overall cost = Sum of costs of individual operations + cost of writing intermediate results to disk

Page 31: CSCI 5708: Query Processing II

15.31CSCI 5708, Spring 2004. University of Minnesota

PipeliningPipelining Pipelined (stream-based) evaluation : evaluate several

operations simultaneously, passing the results of one operation on to the next.

Much cheaper than materialization: no need to store a temporary relation to disk.

Pipelining may not always be possible: E.g. merge join, or hash join

These result in intermediate results being written to disk and then read back always

For pipelining to be effective, use evaluation algorithms that generate output tuples even as tuples are received for inputs to the operation.

Page 32: CSCI 5708: Query Processing II

15.32CSCI 5708, Spring 2004. University of Minnesota

SortingSorting We may build an index on the relation, and then use the index to

read the relation in sorted order. May lead to one disk block access for each tuple.

Q: Why sorting? User may want answers in some order, e.g., employees retrieved by

increasing age

Duplicate elimination: projection

Sort-merge join

For relations that fit in memory, techniques like quicksort can be used. For relations that don’t fit in memory, external sort-merge is a good choice.

Page 33: CSCI 5708: Query Processing II

15.33CSCI 5708, Spring 2004. University of Minnesota

External Sort-MergeExternal Sort-Merge1. Create sorted runs. Let i be 0 initially.

Repeatedly do the following till 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; increment i.Let the final value of I be N

2. Merge the runs (N-way merge). We assume (for now) that N < M. 1. 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 page

2. repeat

1. Select the first record (in sort order) among all buffer pages

2. Write the record to the output buffer. If the output buffer is full write it to disk.

3. Delete the record from its input buffer page.If the buffer page becomes empty then read the next block (if any) of the run into the buffer.

3. until all input buffer pages are empty:

Let M denote memory size (in pages).

Page 34: CSCI 5708: Query Processing II

15.34CSCI 5708, Spring 2004. University of Minnesota

External Sort-Merge (Cont.)External Sort-Merge (Cont.) If i 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.

Page 35: CSCI 5708: Query Processing II

15.35CSCI 5708, Spring 2004. University of Minnesota

Example: External Sorting Using Sort-MergeExample: External Sorting Using Sort-Merge

Page 36: CSCI 5708: Query Processing II

15.36CSCI 5708, Spring 2004. University of Minnesota

External Merge Sort (Cont.)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.

Sort phase: 2br (each block is accessed twice: read and write)

Thus total number of disk accesses for external sorting:

br ( 2 logM–1(br / M) + 2)