【数据库】SQL是如何执行的?

一、Oracle中的SQL

(一)执行过程:

 

 

 

 语法检查:检查拼写有无错误

 语义检查:检查访问对象是否存在

 权限检查:查看用户是否有访问数据的权限

 共享池检查:共享池(shared pool)是一块内存池,主要作用是缓存SQL语句和该语句的执行计划。Oracle 通过检查共享池是否存在 SQL 语句的执行计划,来判断进行软解析,还是硬解析

 优化器:进行硬解析

 执行器:有了解析树与执行计划后,SQL依照解析树与执行计划进行执行

(二)硬解析和软解析

1.Oracle 首先对 SQL 语句进行 Hash 运算,然后根据 Hash 值在库缓存(Library Cache)中查找,查找的存在与否对应软解析与硬解析

2.软解析:存在SQL语句的执行计划,直接拿来执行

3.硬解析:没有执行计划,Oracle创建解析树进行解析,生成执行计划,进入优化器后进行解析

4.执行中尽量避免硬解析:

使用变量绑定可以尽量减少硬解析

比如说: SQL> select * from player where player_id = 10001; 

这样的语句等我们以后查阅10002,10003非常不优化。如果我们这样写: 

SQL> select * from player where player_id = :player_id; 

然后不断地给予变量player_id赋值。这就创建了一个执行计划。就可以减少硬解析。这就是变量绑定

但是这种方式使用动态SQL的方式,参数不同会导致SQL的执行效率不同,SQL优化也比较困难

(三)Oracle的共享池

1.共享池是Oracle的术语,包括库缓存、数据字典缓冲区等

2.库缓存:缓存SQL语句与执行计划

3.数据字典缓冲区:储存Oracle中的对象定义(比如表、视图、索引)。在对SQL进行解析时,如果需要数据,直接从该区域中提取

二、MySQL中的SQL

(一)执行过程

1.MySQL由三层组成

  1)连接层:客户端和服务器端建立连接,客户端发送 SQL 至服务器端;

  2)SQL 层:对 SQL 语句进行查询处理;

  3)存储引擎层:与数据库文件打交道,负责数据的存储和读取。

2.SQL层的结构

SQL语句→解析器→优化器→执行器→输出结果,这种流程和Oracle一样

解析器:进行语义分析

优化器:确定SQL语句的执行路径

执行器:判断用户是否具有权限。如果有,就执行

(二)MySQL的储存引擎

MySQL的储存引擎采取插件的形式,不同引擎面向不同的数据库应用环境

1.默认引擎:

  1)InnoDB:5.5version后的默认引擎。最大的特点是支持事务、行级锁定、外键约束等。

  2)MyISAM :5.5version前的默认引擎。不支持事务,也不支持外键,最大的特点是速度快,占用资源少。

2.其余常用引擎

  1)Memory:使用系统内存作为存储介质,以便得到更快的响应速度。但是一旦程序崩溃会导致数据丢失。因此我们只用这个引擎储存临时数据

  2)NDB :主要用于 MySQL Cluster 分布式集群环境,类似于 Oracle 的 RAC 集群。

  3)Archive:用于文件归档,在请求写入时会进行压缩,所以也经常用来做仓库。

posted @ 2020-02-13 17:18  没有照片的稻田献一  阅读(481)  评论(0)    收藏  举报