1. A connection
from an application program to the PostgreSQL server has to be established.
The application
program transmits a query to the server and waits to receive the results sent
back by the server.
2. The parser
stage checks the query transmitted by the application program for correct
syntax and creates a query tree.
3. The rewrite
system takes the query tree created by the parser stage and looks for any rules
(stored in the system catalogs) to apply to the query tree.
It performs the
transformations given in the rule bodies.
(Syntactic and Semantic Checks, Statement Transformation and View Merging).
4. The
planner/optimizer takes the (rewritten) query tree and creates a query plan
that will be the input to the executor.
Optimizer creates
all possible paths leading to the same result.
For example if
there is an index on a relation to be scanned, there are two paths for the
scan.
One possibility
is a simple sequential scan and the other possibility is to use the index.
Next the cost for
the execution of each path is estimated and the cheapest path is chosen.
The cheapest path
is expanded into a complete plan that the executor can use.
5. The executor
recursively steps through the plan tree and retrieves rows in the way
represented by the plan.
The executor
makes use of the storage system while scanning relations, performs sorts and
joins, evaluates qualifications and finally hands back the rows derived.
No comments:
Post a Comment