SQL 语句是怎么执行的?

数据库 其他数据库
解析器将语法树交给查询优化器。查询优化器的任务是优化 SQL 查询的执行方式,生成一个执行计划。执行计划决定了数据库如何从存储中读取数据、如何连接不同的表、如何使用索引等。

数据库中如何执行 SQL 语句?

下图显示了这一过程。请注意,不同数据库的架构各不相同,下图展示了一些常见的设计。

图片图片

第 1 步 - 通过传输层协议(如 TCP)向数据库发送 SQL 语句。

第 2 步 - 将 SQL 语句发送到命令解析器,在那里进行语法和语义分析,然后生成查询树。

第 3 步 - 将查询树发送给优化器。优化器会创建一个执行计划。

生成执行计划:解析器将语法树交给查询优化器。查询优化器的任务是优化 SQL 查询的执行方式,生成一个执行计划。执行计划决定了数据库如何从存储中读取数据、如何连接不同的表、如何使用索引等。优化器会尝试选择最有效的执行路径,可能会考虑以下因素:

  • 使用索引扫描(index scan)。
  • 如何连接表(如使用 nested loop join、hash join、merge join 等)。
  • 选择不同的操作顺序。

成本估算:优化器基于数据库的统计信息(如表的大小、索引的选择性等)来估算不同执行计划的成本,选择最优的方案。

第 4 步 - 将执行计划发送给执行器。执行过程中,数据库会根据需要访问磁盘或缓存中的数据。如果查询需要使用索引,数据库会通过索引访问数据;如果查询没有使用索引,可能会进行全表扫描。

第 5 步 - 访问方法提供执行所需的数据获取逻辑,从存储引擎获取数据。

第 6 步 - 访问方法决定 SQL 语句是否只读。如果查询是只读的(SELECT 语句),则将其传递给缓冲区管理器进行进一步处理。缓冲区管理器会在缓存或数据文件中查找数据。

第 7 步 - 如果语句是 UPDATE 或 INSERT,则将其传递给事务管理器作进一步处理。

第 8 步 - 在事务处理期间,数据处于锁定模式。这是由锁管理器保证的。它还能确保事务的 ACID 属性。

责任编辑:武晓燕 来源: ByteByteGo
相关推荐

2023-12-27 09:32:47

SQL语句数据

2022-07-28 09:13:30

MySQL数据库

2022-04-10 23:42:33

MySQLSQL数据库

2022-02-11 14:43:53

SQL语句C/S架构

2010-09-03 14:47:50

SQLSELECT语句

2010-09-25 14:59:54

SQL语句

2024-12-17 06:20:00

MySQLSQL语句数据库

2010-04-29 14:06:40

Oracle SQL

2021-07-28 07:22:40

SQL顺序Hive

2010-09-25 16:21:41

SQL语句

2019-11-06 09:30:35

SQL查询语句数据库

2010-11-04 09:43:46

LINQ to SQL

2011-07-21 13:44:52

MySQLmysqldumpsl

2013-10-29 16:27:23

MySQLSQL语句

2010-03-31 15:03:54

Oracle执行

2021-06-07 08:37:03

SQL 查询语句

2010-09-06 13:17:19

SQL Server语句

2010-09-07 11:41:24

SQL语句

2020-08-07 06:57:57

SQL数据库工具

2010-09-08 15:00:03

SQL语句执行
点赞
收藏

51CTO技术栈公众号