SQL 中的查询执行引擎
在本文中,我们将讨论 SQL 中的查询执行引擎以及运行任何查询时的所有方面。当我们运行任何查询以从数据库中获取数据时,同时许多事情会同时发生以获得所需的结果。
让我们简要讨论一下提交查询时会发生什么,然后我们将讨论查询执行的所有阶段。
当查询到来时,数据库实际上是如何回答它的?因此,数据库系统要做的第一件事就是解析 SQL 查询并找出查询试图做什么,然后计算与给定 SQL 查询等效的不同表达式。 SQL 查询被分解为关系代数。
例如,考虑一个查询:
询问:
Select * from account
Where balance>1000;
此查询的目的是找出余额大于 1000 的所有帐户的详细信息。一旦我们编写了这个查询,这相当于下面的关系代数表达式。
πbalance( δbalance>1000(account) )
上面的 SQL 查询也等价于下面给出的关系代数表达式。
δbalance>1000( πbalance(account) )
两个查询表达式是相同的。解析查询时,通常会发生两件事:
- 生成所有等效的行动计划
- 并且为每个生成的等效行动计划创建一个查询顺序树。
然后评估查询顺序树。
查询评估阶段:
- 解析器/翻译器
- 优化器
- 执行计划
- 查询执行引擎
现在我们将详细讨论查询评估的每个阶段。
1. Parser/Translator:当我们提交任何查询运行解析器的任务是检查语法和验证查询。它检查查询语法是否正确。它还检查查询语义。我们的 SQL 命令是高级语言,所以我们需要将其转换为低级语言。翻译器将 SQL 查询转换为关系代数表达式,即从高级语言到低级语言。
2.优化器:正如我们所知,当我们提交任何查询时,它都会被转换为各种关系代数表达式。对于给定的查询,我们有许多关系代数表达式。优化器选择成本低的查询。为此优化器使用有关数据的统计信息。
3.执行计划:在这个阶段,数据库决定给定查询指令的执行顺序。例如,考虑以下查询:
Select * From emp_table
Where experience>5;
这里数据库将首先执行From语句,然后执行Where语句,最后执行Select语句。所以这个查询的执行顺序如下:
From->Where->Select
4.查询执行引擎:执行引擎通过从数据库中获取数据来执行操作。查询执行引擎将采用查询评估计划,然后执行该计划并将结果返回给查询。查询引擎的例子有 Apache Spark、Apache Drill、Presto 等。所以基本上查询执行引擎解释 SQL 命令并从数据库访问数据,然后最终返回给定 SQL 查询的答案。查询执行执行了许多功能,其中一些是:
- 它充当执行计划中所有命令的调度程序。它遍历计划中的所有命令,直到批处理完成。
- 它与存储引擎交互以从表和索引中检索和更新数据。