数据库中如何执行 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 属性。