CHAPTER - 2
QUERY PROCESSING AND OPTIMIZATION
COURSE NAME: ADVANCED DATABASE SYSTEM
Compiled by: Temesgen Tilahun
INTRODUCTION
Query processing requires that the DBMS identify and execute a strategy for retrieving
the results of the query. Query optimization is necessary to determine the optimal
alternative to process a query.
There are two main techniques for query optimization.
The first approach is to use a rule based or heuristic method for ordering the
operations in a query execution strategy.
The second approach estimates the cost of different execution strategies and chooses
the best solution.
In general most commercial database systems use a combination of both techniques.
Compiled by: Temesgen Tilahun 2
INTRODUCTION
In this chapter we discuss the techniques used internally by a DBMS to process,
optimize, and execute high-level queries.
A query expressed in a high-level query language such as SQL must first be
scanned, parsed, and validated.
The scanner identifies the query tokens such as SQL keywords, attribute names,
and relation names that appear in the text of the query.
The parser checks the query syntax to determine whether it is formulated
according to the syntax rules (rules of grammar) of the query language.
Compiled by: Temesgen Tilahun 3
INTRODUCTION
The query must also be validated by checking that all attribute and relation names are
valid and semantically meaningful names in the schema of the particular database
being queried.
An internal representation of the query is then created, usually as a tree data structure
called a query tree.
It is also possible to represent the query using a graph data structure called a query
graph.
The DBMS must then devise an execution strategy or query plan for retrieving the
results of the query from the database files.
Compiled by: Temesgen Tilahun 4
INTRODUCTION
A query typically has many possible execution strategies and the process of
choosing a suitable one for processing a query is known as query optimization.
The query optimizer module has the task of producing a good execution plan.
The code generator generates the code to execute that plan.
The runtime database processor has the task of running (executing) the query
code, whether in compiled or interpreted mode, to produce the query result.
If a runtime error results, an error message is generated by the runtime database
processor.
Compiled by: Temesgen Tilahun 5
Translating SQL Queries into Relational Algebra
In practice, SQL is the query language that is used in most commercial
RDBMSs.
An SQL query is first translated into an equivalent extended relational algebra
expression represented as a query tree data structure that is then optimized.
Typically, SQL queries are decomposed into query blocks, which form the
basic units that can be translated into the algebraic operators and optimized.
A query block contains a single SELECT – FROM – WHERE expression, as well
as GROUP BY and HAVING clauses if these are part of the block.
Compiled by: Temesgen Tilahun 6
Query Processing
Query Processing: It is a procedure of converting a query written in high level language
(Eg. SQL) into a correct and efficient execution plan expressed in low level language, which is
used for data manipulation.
Execution Plan: Query processing is a stepwise process.
Query Processor: Query processor is responsible for generating execution plan.
Before retrieving, updating or deleting data in database, a query goes through a series of query
compilation steps. These steps are known as execution plan.
In query processing, the first phase is transformation in which parser first checks the syntax of
query and also checks the relations and attributes used in the query that are defined in the
database.
Compiled by: Temesgen Tilahun 7
Query Processing
After checking the syntax and verifying the relations, query is transformed into equivalent
expression that are more efficient to execute.
Transformation, depends upon various factors like existence of certain database structures,
presence of different indexes, file is sorted or not, cost of transformation, physical
characteristics of data, etc.
After transformation of query, transformed query is evaluated by using number of strategies
known as access plans.
The next step is to validate the user privileges and ensure that the query does not disobey the
relevant integrity constraints.
Finally, execution plan is executed to generate the result.
Compiled by: Temesgen Tilahun 8
General Strategy for Query Processing
(i) Representation of query: Query written by user cannot be processed directly by
system.
Query processor first checks the syntax and existence of relations and their attributes
in database.
After validations, query processor transform it into equivalent and more efficient
expression; for example, query will be converted into a standard internal format that
parser can manipulate.
Internal form may be relational algebra, relational calculus, any low-level language,
operator graphs etc.
Compiled by: Temesgen Tilahun 9
General Strategy for Query Processing
(ii) Operator Graphs: Operator graphs are used to represent query.
It gives the sequence of operations that can be performed. It is easy to understand the
query represented by operator graphs.
It is useful to determine redundancy in query expressions, result of transformation,
simplify the view etc.
(iii) Response time and Data characteristics consideration: Data characteristics like
length of records, expected sizes of both intermediate and final results, size of
relations etc., are also considered for optimizing the query.
In addition to this overall response time is also determined.
Compiled by: Temesgen Tilahun 10
Steps in Query Processing
(i) Syntax Analysis: Query in high-level language is parsed into
tokens and tokens are analyzed for any syntax error.
Order of tokens are also maintained to make sure that all the rules
of language grammars are followed.
In case of any error, query is rejected and an error code with
explanation for rejection is returned to the user.
(Only syntax is checked in this step).
Compiled by: Temesgen Tilahun 11
Steps in Query Processing
Compiled by: Temesgen Tilahun 12
Steps in Query Processing
(ii) Query Decomposition: In this step, query is decomposed into query blocks
which are the low-level operations.
It starts with the high-level query that is transformed into low level operations
and checks whether that query is syntactically and semantically correct.
For example, SQL query is decomposed into blocks like Select block, From
block, Where block, etc.
Compiled by: Temesgen Tilahun 13
Steps in Query Decompositions
(A) Query Analysis: In the query analysis stage, programming language compiler
checks that the query is lexically and syntactically correct.
A syntactically correct query is analyzed using system catalogues to verify the
existence of relations and attributes used in query.
After analysis a correct query is converted into some internal representation, which is
more efficient for processing.
The type specification of the query qualifier and result is also checked at this stage.
The internal representation may be, query tree or query graph.
Compiled by: Temesgen Tilahun 14
Query Tree Notation
The internal representation may be query tree or query graph.
Query tree notation: A typical internal representation of query is query tree.
It is also known as relational algebra tree.
A query tree is constructed using tree data structure that corresponds to the relational algebra
expression.
Main Components of Query Tree are:
⧫ Root of tree – represents result of query.
⧫ Internal nodes – represent intermediate relation that is the output of applying an operation in the
algebra.
⧫ Leaf nodes – represent input relations of the query.
Compiled by: Temesgen Tilahun 15
Query Tree Notation
The sequence of operations is directed
from leaves to the root node.
Example of Query Tree Notation:
Compiled by: Temesgen Tilahun 16
Query Graph Notation
Query Graph Notation: Graph data structure is also used for internal
representation of query.
Main components of graphs notations are:
⧫ Relation nodes – represent relations by single circle.
⧫ Constant nodes – represent constant values by double circle.
⧫ Edges – represent relation and join conditions.
⧫ Square brackets – represent attributes retrieved from each relation.
Compiled by: Temesgen Tilahun 17
Query Graph Notation
Figure of Query Graph Notation:
Compiled by: Temesgen Tilahun 18
Steps in Query Decompositions
(B) Query Normalization: After query analysis, it is normalized to remove any
redundancy.
In this phase, query is converted into normalized form that can be easily
manipulated.
A set of equivalency rules are applied to query and simplify the projection and
selection operations to avoid redundancy.
Query can be converted into one of the following two normal forms:
Conjunctive normal form and Disjunctive normal forms.
Compiled by: Temesgen Tilahun 19
Steps in Query Decompositions
(1) Conjunctive normal form: It is a sequence of conjuncts that are connected with ‘AND’ operator.
A conjunct consists of one or more terms connected with ‘OR’ operator.
A conjunctive selection consists only those tuples that satisfy all conjuncts.
Example: (Emp_Job = ‘Analyst’ ∨ salary < 50000) ∧ (Hire_Date > 1–1–2000)
(2) Disjunctive normal forms: It is a sequence of disjuncts that are connected with ‘OR’ operator.
A disjunct consists of one or more terms connected with ‘AND’ operator.
A disjunctive selection contains those tuples that satisfy anyone of the disjunct.
Example: (Emp_Job= ‘Analyst’ ∧ salary < 5000) ∨ (Hire_Date > 1–1–2000).
Disjunctive normal form is more useful as it allows the query to break into a series of independent
sub-queries linked by union.
Compiled by: Temesgen Tilahun 20
Steps in Query Decompositions
(C) Semantic Analyzer: The semantic analyzer performs the following tasks :
It helps in reducing the number of predicates and rejects contradictory
normalized forms.
In case of missing join specification, components of query do not contribute to
generation of results.
It identifies these queries and rejects them.
It makes sure that each object in query is referenced correctly according to its
data type.
Compiled by: Temesgen Tilahun 21
Steps in Query Decompositions
(D) Query Simplifier: The major tasks of query simplifier are as follows:
It eliminates common sub-expressions and redundant qualification.
It introduces integrity constraints, view definitions into the query graph
representation.
It eliminates query that voids any integrity constraint without accessing the database.
It transforms sub-graphs into semantically equivalent and more efficient form.
It deals with user access rights.
(E) Query Restructuring: At the final stage of query decomposition, transformation
rules are applied to restructure the query to give a more efficient implementation.
Compiled by: Temesgen Tilahun 22
Steps in Query Processing
(iii) Query Optimization: The aim of the query optimization step is to choose the best
possible query execution plan with minimum resources required to execute that plan.
(iv) Execution Plan: It is the basic algorithm used for each operation in the query.
Execution plans are classified into following four types: (Check From Page 6 of the PDF file)
1) Left-deep tree query execution plan
2) Right-deep tree query execution plan
3) Linear tree execution plan and
4) Bushy execution plan
Compiled by: Temesgen Tilahun 23
Steps in Query Processing
(v) Query Code Generator: After selecting the best possible execution
plan query is converted into low-level language so that it can be taken as
input by runtime database process.
(vi) Runtime Database Processor: It deals directly with main database and
do the necessary operation mentioned in query and returns the result to
user.
Compiled by: Temesgen Tilahun 24
Query Optimization
Query Optimization means converting a query into an equivalent form which is more
efficient to execute.
Compiled by: Temesgen Tilahun 25
Query Optimization
The main issues that need to be considered in query optimization are:
Reduction of data transfer with database.
Use of available indexes for fast searching.
Reduction of number of times the database is manipulated.
The order in which joins should be performed.
How to store intermediate results?
There are two main techniques used to implement query optimization.
These are heuristic query optimization and cost based query optimization.
Compiled by: Temesgen Tilahun 26
Transformation Rules for Relational Algebra
The transformation rules are used to formulate a relational algebra expression
into different ways and query optimizer choose the most efficient equivalent
expression to execute.
Two expressions are considered to be equivalent if they have same set of
attributes in different order but representing the same information.
Compiled by: Temesgen Tilahun 27
Cost based Query Optimization
In cost based query optimization, optimizer estimates the cost of running of all
alternatives of a query and choose the optimum alternative.
The alternative which uses the minimum resources is having minimum cost.
The cost of a query operation is mainly depend on its selectivity i.e., the
proportion of the input relations that forms the output.
The main components used to determine the cost of execution of a query:
Access cost of secondary storage, Storage cost, Computation cost, Memory
usage cost and Communication cost.
Compiled by: Temesgen Tilahun 28
Cost based Query Optimization
(a) Access cost of Secondary Storage: Access cost to secondary storage consists of cost
of database manipulation operations which includes searching, writing, reading of data
blocks stored in the secondary memory.
The cost of searching depends upon the type of indexes (primary, secondary, hashed),
type of file structure and ordering of relation.
In addition to physical storage location like file blocks are allocated contiguously on
the same disk or scattered on the disk.
(b) Storage cost: Storage cost consists of cost of storing intermediate results (tables or
files) that are generated by the execution strategy for the query.
Compiled by: Temesgen Tilahun 29
Cost based Query Optimization
(c) Computation cost: Computation cost consists of performing in-memory
operations during query execution such as sorting of records in a file, merging of
records, performing computations on field values, searching of records. These are
mainly performed on data buffers.
(d) Memory usage cost: It consists of cost of relating to the number of memory
buffers needed during query execution.
(e) Communication cost: It consists of the cost of transferring query and its result
from database location to the location of terminal where the query is originated.
Compiled by: Temesgen Tilahun 30
Cost based Query Optimization
From all the above components, the most important is access cost to secondary storage
because secondary storage is comparatively slower than other devices.
Optimizer try to minimize computation cost for small databases as most of the data
files are stored in main memory.
For large database, it try to minimize the access cost to secondary storage and
For distributed databases, it tries to minimize the communication cost because various
sites are involved for data transfer.
To estimate the cost of execution strategies, optimizer access statistical data stored in
DBMS catalog.
Compiled by: Temesgen Tilahun 31
The Information Stored in DBMS catalog is given below:
A. Number of records in relation X, given as R.
B. Number of blocks required to store relation X, given as B.
C. Blocking factor of relation X, given as BFR.
D. Primary access method for each file and attributes for each file.
E. Number of levels for each multi-level index for an attribute A given as IA.
F. Number of first-level index blocks for an attribute A, given as BA I 1 .
G. Selection cardinality of attribute A in relation R, given as SA, where SA = R × SLA ,
where SLA is the selectivity of the attributes.
Compiled by: Temesgen Tilahun 32
Cost Function for Selection Operation
Cost Function for Selection Operation: Selection operation works on a
single relation in relation algebra and retrieves the records that satisfy the
given condition.
Depending upon the structure of file, available indexes, searching
methods, the estimated cost of strategies for selection operation is as
given below.
Compiled by: Temesgen Tilahun 33
The Estimated Cost of Strategies for Selection Operation is as given below:
Compiled by: Temesgen Tilahun 34
Example of Employee Table
Consider, there are 10,000 records stored in 2000 blocks.
Also the following indexes are available.
A secondary index on the Emp-ID with 4 levels.
A clustering index on salary with 3 levels and average selection cardinality of
30.
A secondary index on non-key attributes Age with 2 levels and 4 first level
index blocks.
There are 200 distinct values for Age.
Compiled by: Temesgen Tilahun 35
EXAMPLE – 1 CONT’D . . .
Compiled by: Temesgen Tilahun 36
EXAMPLE – 1 CONT’D . . .
(iii) This query has a conjunctive selection condition: To estimate the cost of
use using anyone of the two components of selection condition, to retrieve the
records plus the linear search.
The linear search costs 2000 and condition salary > 9000 first gives cost
estimate of Isalary + (B/2) = 2 + 1000 = 1002 and
Cost of condition Age = 20 is 30 + 2 = 32
So, the total cost is 32 + 1002 = 1034
Compiled by: Temesgen Tilahun 37
Cost Function for Join Operation
Cost Function for Join Operation: Join operation is the most time
consuming operation in databases and
An accurate cost function for join operations depends upon the
estimate of size of file (number of records) after the join operation.
Compiled by: Temesgen Tilahun 38
The Estimated Cost of Strategies for Join Operation is given below:
Compiled by: Temesgen Tilahun 39
Example: Consider we have 600 records in department table.
BFR for department table is 60 and number of blocks are 600/60 = 10
For the Join Operation,
Type of JOINS COST
Block nested-loop joins 22000 (Buffer has only one block)
2010 (if all blocks of employee can be
read into database buffer)
Hash Join 6010 (is hash index is held in memory)
Compiled by: Temesgen Tilahun 40
EXAMPLE
Given two unary relation (contains only one attribute), R1 and R2
R1 = 7, 2, 9, 8, 3, 9, 1, 3, 6
R2 = 8, 4, 2, 1, 3, 2, 7, 3
Compiled by: Temesgen Tilahun 41
Thank You !
?
Compiled by: Temesgen Tilahun 42