In Section 21.1 we provide an overview of query processing and examine the main phases
of this activity. In Section 21.2 we examine the first phase of query processing, namely
query decomposition, which transforms a high-level query into a relational algebra query
and checks that it is syntactically and semantically correct. In Section 21.3 we examine the
heuristic approach to query optimization, which orders the operations in a query using
transformation rules that are known to generate good execution strategies. In Section 21.4
we discuss the cost estimation approach to query optimization, which compares different
strategies based on their relative costs and selects the one that minimizes resource usage.
In Section 21.5 we discuss pipelining, which is a technique that can be used to further
improve the processing of queries. Pipelining allows several operations to be performed in
a parallel way, rather than requiring one operation to be complete before another can start.
We also discuss how a typical query processor may choose an optimal execution strategy.
In the final section, we briefly examine how Oracle performs query optimization.
In this chapter we concentrate on techniques for query processing and optimization in
centralized relational DBMSs, being the area that has attracted most effort and the model
that we focus on in this book. However, some of the techniques are generally applicable
to other types of system that have a high-level interface. Later, in Section 23.7 we briefly
examine query processing for distributed DBMSs. In Section 28.5 we see that some of the
techniques we examine in this chapter may require further consideration for the Object-
Relational DBMS, which supports queries containing user-defined types and user-defined
functions.
The reader is expected to be familiar with the concepts covered in Section 4.1 on the
relational algebra and Appendix C on file organizations. The examples in this chapter are
drawn from the DreamHome case study described in Section 10.4 and Appendix A.