SQL的一生 | PostgreSQL
一条查询语句(SQL)为了得到查询结果,将会经历以下阶段:
- 建立连接:先建立由应用程序到pg服务器的连接,之后应用程序向pg服务器发送一条查询,并等待接收pg服务器传回查询结果。
- 解析阶段(parser stage):pg服务器对由应用程序传来的查询进行语法检查,并将其转化为一个查询树(query tree)。
- 重写系统(rewrite system):实现查询树的等价转化。
- 在得到的查询树的基础上,查找可以应用的规则(这些规则存储在系统目录中);
- 这些规则实现查询的等价转化;
- 视图(view)是查询重写的一种应用。
- 计划器或优化器(planner/optimizer):将查询树转化为查询计划,作为执行器的输入。
- 先创建所有可能的最后结果相同的查询路径;
- 然后估算每条路径所需要的执行代价;
- 从中选择代价最低的查询路径;
- 将路径扩展成完整的查询计划,最终送给执行器。
- 执行器(executor):递归执行计划树(plan tree)
- 在扫描数据表时会用到存储系统;
- 执行排序和连接等操作;
- 评估合法性;
- 最后返回符合要求和数据行。