首页 > 其他分享 >第一章《一条查询语句是怎么运行的》

第一章《一条查询语句是怎么运行的》

时间:2022-12-05 09:45:04浏览次数:38  
标签:语句 执行器 缓存 查询 Mysql 第一章 我们

第一章《一条查询语句是怎么运行的》

Mysql内部是怎么运行的

这一章的重点就是这一张图,我们从一个外层使用者的角度来窥探一下Mysql的内幕。

连接器

首先,我们知道不同系统之间的通信,就离不开网络,所以一定要有一个Server端去处理这些网络请求。在这里Mysql去客户端沟通的就是连接器。

看到这个我不由的想起来了在Api网关中负责网络处理部分的Netty服务的,它同样也是做了管理HTTP请求、权限验证这样的功能。在这里我可以认为他就是Mysql这个系统的网关。

查询缓存

查询缓存,我看过很多教程,他们都将它称之为“鸡肋”;食之无味弃之可惜。为什么呢?

因为当一个表进行了一次修改了以后,它表内所有的缓存都将被清理掉。可以说可能查询缓存带来的便利还不及我们花费的维护它的付出。所以顺理成章地在Mysql8.0以后查询缓存就不复存在。

分析器

要知道,我们写出来的SQL并不是它最终的样子,比如我们可能有很多的符号啊变量啊,要把它分析成它真正的样子,比如字符串id它其实是某一列id,赋予他真正的含义。同时在这个过程中,会进行判错,如果这一个字符串在我们的表中没有,或者我们的sql语义不对,他就会进行报错。

这里我很快联想到了JVM的类加载阶段的连接阶段中的解析,同样也是需要把符号引用转为直接引用,这里也是同理,把代表着某列的字符串转为真实的某列。

优化器

我们写的SQL语句,它最终将如何执行这是不确定的,优化器就是来判断着去找一条它认为最优的方案,具体为我要使用什么哪个索引,我join的时候哪个表要作为驱动表,诸如此类。

但是有些时候优化器的判断也会出错,它并不一定能给我们最优解。所以我们有时仍需要自主设置索引force index().

执行器

分析器告诉了执行器需要做的事,优化器告诉了执行器该怎么去做,那执行器当仁不让,去做自己要做的事了。

另外在做之前还要判断一下,我能不能有进行这个操作的权限。

存储引擎

存储引擎是可插拔的,例如Memory,Innodb。当然我们常用的就是Innodb,他是以B+树为索引,用页的方式去存储数据。

同时这也意味着,Mysql服务端提供的操作和存储引擎是相互隔离的。

总结

第一章从Mysql全局出发,了解了我们写的一条sql语句,它在mysql中会经历什么。

标签:语句,执行器,缓存,查询,Mysql,第一章,我们
From: https://www.cnblogs.com/azxx/p/16951497.html

相关文章

  • 在C#中使用Irony实现SQL语句的解析
    https://sunnycoding.cn/2019/07/11/sql-parser-with-irony-in-csharp/ 本文结构定义语法语法测试语句解析获得解析结果总结在上一篇博文中,我介绍了LOGO语言的C......
  • MySQL 高级SQL语句
    一、高级SQL语句(进阶查询)先准备2个表一个location表:  一个store_info表:  1.1selectselect,显示表格中一个或数个字段的所有数据记录。    1.2dis......
  • Android 开启 viewBinding,减少 findViewById 语句的使用
    找到build.gradle文件,因为有两个build.gradle,我们要操作的是第二个:在这个位置加上这一句话,然后点击右上角的SyncNow按钮更新项目:viewBinding{enabled=tr......
  • mysql高阶语句
    Mysql高阶语句按关键字排序:数据准备:表名:info属性:id、name、score、address、hobbidcreatetableinfo(idint,namevarchar(10)primarykeynotnull,scoredecim......
  • MySQL进阶sql语句①
    一.MySQL进阶查询1.1排序(orderby)①使用orderby语句进行排序ASC:升序,默认的排序,使用orderby时,会默认该排序DESC:降序排序可针对对一个或多个字段,多字段要第一个字......
  • 大数据--HiveQL语句(基本操作)
    一.数据库操作1.显示当前所有数据库Showdatabases;2.创建数据库studyCREATEDATABASEIFNOTEXISTSstudyCOMMENT"Thisisstudydatabase"LOCATION'/user/hive_db/cr......
  • #yyds干货盘点#【愚公系列】2022年12月 微信小程序-项目篇(公交查询)-05线路查询
    前言1.相关API接口地址:https://api.jisuapi.com/transit/line返回格式:JSON,JSONP请求方法:GETPOST请求示例:https://api.jisuapi.com/transit/line?cityid=382&transit......
  • 世界杯竞猜项目Dapp-第一章(合约开发)
    前言最近卡塔尔世界杯如火如荼,让我们一起来尝试利用solidity语言做一个世界杯竞猜的Dapp实战项目,本次实战学习主要参考:https://github.com/dukedaily/solidity-expert......
  • vba-在特定列中查询目标字符串是否存在
    PrivateSubSearchByTaget()IfConfigSht.Range("A:A").Find(What:="1232",LookAt:=xlWhole)IsNothingThenMsgBox"不存在"EndIfEndSubFunctionSea......
  • 2.操作数据库(MySql中语句不区分大小写)
    操作数据库→操作数据库中的表→操作数据库中表的数据1.操作数据库1.创建数据库CREATEDATABASE[IFNOTEXISTS]westos--[]代表可选的,写不写都行2.删除数据库DRO......