Posts

Showing posts with the label database engine

SQL order of execution

Image
Introduction In SQL in general and PostgreSQL in particular, the order of writing keywords in code (Lexical Order) is completely different from the order in which the Database Engine actually executes the statement ( Logical Execution Order ). A query with full command structures like this will be parsed and executed by the Optimizer in a strict logical order from root (data source) to top (displayed results). [ WITH [ RECURSIVE ] cte_name AS (...) ] SELECT [ DISTINCT [ ON (...)] ] columns FROM source_table [ TABLESAMPLE ... ] [ JOIN_clauses ] [ WHERE raw_filter_conditions ] [ GROUP BY { column | ROLLUP | CUBE | GROUPING SETS } ] [ HAVING group_filter_conditions ] [ WINDOW window_name AS (...) ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] other_select_statement ] [ ORDER BY sort_order ] [ LIMIT limit_count ] [ OFFSET offset_count ] [ FOR UPDATE / FOR SHARE [ SKIP LOCKED ] ]; Below is the execution order from the first step to the last step...