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程序员进阶 - 博客园

相关推荐
新法国菜30 分钟前
MySql知识梳理之DDL语句
数据库·mysql
DarkAthena1 小时前
【GaussDB】全密态等值查询功能测试及全密态技术介绍
数据库·gaussdb
ShawnLeiLei2 小时前
2.3 Flink的核心概念解析
数据库·python·flink
石皮幼鸟2 小时前
数据完整性在所有场景下都很重要吗?
数据库·后端
大只鹅3 小时前
Centos7.9 Docker26容器化部署 MySql9.4 一主一从的同步复制部署
mysql·centos
叁沐4 小时前
MySQL 28 读写分离有哪些坑?
mysql
nightunderblackcat4 小时前
新手向:异步编程入门asyncio最佳实践
前端·数据库·python
DarkAthena4 小时前
【GaussDB】使用MySQL客户端连接到GaussDB的M-Compatibility数据库
数据库·mysql·gaussdb
livemetee5 小时前
Flink2.0学习笔记:使用HikariCP 自定义sink实现数据库连接池化
大数据·数据库·笔记·学习·flink
XXD啊5 小时前
Redis 从入门到实践:Python操作指南与核心概念解析
数据库·redis·python