当前位置: 首页 > article >正文

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


http://www.kler.cn/a/564397.html

相关文章:

  • 【地图视界-Leaflet1】快速搭建你的第一个地图
  • IP-----动态路由OSPF
  • 【小白数学】为什么可以用拉格朗日乘子法求函数的极值【二】
  • 鸿蒙HarmonyOS NEXT开发:组件-样式-基础 2
  • 火绒终端安全管理系统V2.0网络防御功能介绍
  • undo log、redo log、bin log是什么
  • C# Enumerable类 之 数据筛选
  • 世坤量化兼职体验
  • 高数1.1 函数
  • web网络安全---cookie篇
  • 关于houdini 调用api
  • MySQL中的DATETIME与TIMESTAMP选择指南
  • 生态系统服务权衡与协同动态分析:利用InVEST模型估算产水、固碳、生境质量和土壤保持;时空异质性、双变量分析、多元回归分析等
  • matlab机器人机械臂无人机python自动驾驶无人船控制规划ROS避障
  • 小白向-用python实现快速排序
  • CNN:卷积网络中设计1×1夹在主要卷积核如3×3前后的作用
  • 分布式事物在RocketMQ中的应用
  • (21)从strerror到strtok:解码C语言字符函数的“生存指南2”
  • 实时时钟(RTC)/日历芯片PCF8563的I2C读写驱动(2):功能介绍
  • 武理本南理硕研一:算法卷不动走向开发岗?自学Linux C++如何规划开发技能树?