mysql服务层介绍,NOSQL+SQL接口(nosql介绍),语法分析器,预处理器,优化器(优化的必要性,基于成本的优化器),缓存(弊端)
目录
mysql服务层
介绍
服务管理和公共组件
备份
NOSQL,SQL接口
介绍
nosql
Parser模块(语法分析器)
介绍
词法分析
语法分析
示例
预处理器
引入
介绍
优化器
介绍
优化的必要性
基于成本的优化器
缓存
介绍
弊端
mysql服务层
介绍
数据库服务层是整个数据库服务器的核心,主要包括:
- 服务管理和公共组件
- nosql和sql接口
- 解析器
- 查询优化器
- 缓存
服务管理和公共组件
备份
全量备份:
增量备份:
NOSQL,SQL接口
介绍
分别对应于传统关系型数据管理和非关系型数据操作的不同需求
接口作用:
- 接收并转发用户发来的sql指令和命令(文本类型),返回结果
- 它充当了用户(客户端)与数据库之间的中介角色
nosql
可以理解为非关系型数据库
大多数 NoSQL 数据库并不使用传统的 SQL 查询语言
- 是采用自己的查询语言或者接口来操作数据,更注重高性能和高并发
关系型数据库使用表格结构,而NoSQL 数据库支持更为灵活的结构
- 如文档、键值对、列族等
Parser模块(语法分析器)
介绍
语法分析器的主要作用是将客户端发来的SQL语句中的关键字和自定义字段进行提取、解析,最终将SQL语句转换为一棵解析树
- 解析文本类型的指令 -> mysql可以执行的内部表示
- 分析的过程中包含词法分析和语法分析
词法分析
主要是对关键字进行提取
- 比如select / update / delete / create...
语法分析
主要判断SQL语句是否满足语法规则
- 如果语法错误则异出异常,也就是我们常见的ERROR1064(42000):You have an error in your SQL syntax。
例如: 验证是否使用错误的关键字,或者使用关键字的顺序是否正确等,还会验证引号前后是否正确等
示例
预处理器
引入
mysql中不仅会验证和提取关键字,还会进一步检测查找的字段/表是否存在
介绍
根据一些 MySQL 规则进一步检查解析树是否合法
- 预处理器还会验证权限,通常很快
优化器
介绍
负责选择最优查询执行计划的核心组件 -- 将解析树 -> 查询计划
- 优化器的目标是根据查询的结构、数据分布、索引等信息,选择一个能够高效执行 SQL 查询的计划,以最小化查询的响应时间和资源消耗
优化的必要性
一条查询可以有多种执行方案
比如说,有两条查询结果都一样的sql,但其中一条把主键的匹配放在了左边,那么效率会更好一些,因为它会先去主键索引中匹配id=1的记录,而不是先全盘扫描匹配name的记录
也就是可能会优化条件过滤的顺序
但也不要因为有优化器的存在就乱写,还是按照mysql匹配索引的规则写出高效的sql
基于成本的优化器
MySQL 的查询优化器是基于成本的优化器,它尝试预测一个查询使用某种执行计划的成本,并选择成本最小的一个
- 可以通过 SHOW STATUS LIKE 'Last_query_cost' 值得知 MySQL 计算的当前查询的成本
缓存
介绍
MySQL的缓存主要的作用是为了提升查询的效率
- 当服务器接收到一个select查询语句时,会先进入缓存查询当前SQL语句在缓存中是否存在
- 缓存以key和value的形式存储,key是具体的SQL语句,value是结果的集合
- 如果命中缓存,直接返回结果 ; 无法命中缓存,则进入分析器进行正常查询流程
弊端
value容易失效
- 当数据库中的数据发生变化时,缓存的 value 可能会变得不再准确 (对于查询缓存,如果涉及的表发生了任何变更,相关的缓存数据就会被标记为失效)
- 如果查询语句中稍微换一些查询的列值,就会形成一条记录,会占用大量资源
所以,mysql5.6版本之后缓存功能默认关闭,8.0被关闭
有参考 -- MySQL 查询执行的过程 - Java程序员进阶 - 博客园