

数据库 | 001-MySQL梳理系列(一)
source link: https://segmentfault.com/a/1190000039089396
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

MySQL基本组成
SQL执行流程
- Server 层主要包括连接器、查询缓存、分析器、优化器、执行器,包含了MySQL主要的很多核心功能,以及所有的内置函数、存储过程、触发器、视图等,其实就是所有跨存储引擎的功能都是在这一层实现的
- 存储引擎层,主要负责数据的存储和读取,是以插件的形式存在的 ,支持如
InnoDB
、MyISAM
、Memory
等多个存储引擎,现在默认为InnoDB
查询缓存
- 当一个SQL执行时首先会进入查询缓存
- 查看之前是否执行过该语句,如果执行过则会以key-value的形式保存在缓存中,key是查询语句,value是查询结果
- 如果缓存命中则直接返回结果,如果查询语句不在缓存中继续后面的流程
- 大多数情况下我们不推荐使用查询缓存 ,因为缓存失效非常频繁,只要一个更新,那么这个表上所有的缓存都会失效,吐过数据的更新比较多,那么缓冲命中的效率很低,不断的在失效
- 在MySQL中提供了参数
query_cache_type
参数来设置,默认是DEMAND
,表示对默认的SQL都不使用查询缓存,如果要对特的语句进行缓存查询,则可以使用SQL_CACHE
来显示的指定,如select SQL_CACHE * from T where ID=1;
- 在MySQL8.0 开始,查询缓存整个功能模块已经删除掉不再拥有
分析器
- 分析器主要包含 词法分析 与 语法分析
- 词法分析主要分析一条SQL中各个字符串代表什么,比如
select
标记出来,这就是一个查询,在具体的表名,查询 的字段等等全部分析出来 - 语法分析主要是分析SQL语句是否符合MySQL的规范,如果我们SQL写的有问题,那么经常看到的一个异常就是
You have an error in your SQL syntax
的提示
优化器
join
执行器
- 首先校验是否有对这张表的访问权限,如果没有权限则会报错
- 如果有,则根据引擎接口打开表进行数据的查询筛选
Buffer Pool
128MB my.ini
[server]
数据页
- MySQL中对数据进行抽象,按照数据页的形式来存放到文件,当查询时,首先定位到要查询数据所在的数据页,之后将整个数据页加载到
Buffer Pool
中, - 数据页默认的大小是
16KB
, 也就是一页数据包含16KB
的数据 - 在
BufferPool
中的数据页一般我们叫缓存页,默认情况下缓存页与磁盘上的数据页大小是对应的 - 对于每个缓存页都有一个描述信息
- 描述信息包括:数据页的所属表空间,数据页的标号,这个缓存页在
Buffer Pool
中的内存地址以及其他一些信息 - 在
Buffer Pool
中,所有的描述信息都在最前面,然后各个缓存页放在后面
- 描述数据大小相当于缓存页大小的
5%
左右,也就是大概800
字节,所以当我们设置buffer pool
的大小为128MB
,但是实际上Buffer Pool
的真实大小会超出一些,可能有有130MB
左右,这多出来的就是每个缓存页的描述信息
表空间
表名.ibd 表名.ibd
数据区
- 在表空间中有太多的数据页不好管理,这是引入了 数据区 的概念,英文:
extent
- 一个数据区中有连续的
64
个数据页,每个数据页16kb
, 所以每个数据区大小是1MB
- 同时
265
个数据区被划分为一组 -
在表空间中 第一组 数据区的 第一个数据区 的 前三个数据页 是固定的,存放一些特殊的描述性的信息
-
FSP_HDR
数据页: 存放一些表空间和这一组数据区的属性 -
IBUF——BITMAP
数据页:存放这组数据页所有的insert buffer
的一些信息 -
INODE
数据页:存放一些特殊信息
-
- 表空间中其他各组数据区的第一个数据区的头两个数据页都是存放特殊信息的
本文由AnonyStar 发布,可转载但需声明原文出处。
欢迎关注微信公账号 :云栖简码 获取更多优质文章
更多文章关注笔者博客 : 云栖简码 i-code.online
Recommend
-
41
公司名称: Hong Kong Applied Science and Technology Research Institute (ASTRI) 工作地点: 香港 薪酬范围: 面议 简历投递: [email protected] 岗位描述、岗位要求: Refere...
-
29
本博客猫叔的博客,转载请申明出处 前言 本系列整理出于《Redis深度历险:核心原理与应用实践》一书,摘抄整理读后感与总结。 好的程序员都会Redis 说说Redis能做什么呢? 1、记...
-
6
Background I've taken on a new project recently. I'm helping teach some local (Indianapolis) homeless youth basic software engineering using the web developer curriculum from Free Code Camp
-
6
PostMac 001 -- Adding pbcopy to ElementaryOS or Another Unix Nov 5, 2016 Well as will become clear in another few blog posts, I took ElementaryOS and installed it on my 2012 MBP with 16 gigs RAM and 768 mb SSD...
-
11
播放控件的本地化与国际化 | 交互问答 001呆呆只是个会写点字的普通设计师各位好,我是...
-
15
Xcode9的无线调试 Facebook开源库fishhook的使用 UIViewController的调试小工具 自定义导航栏的侧滑返回 QGCollectionMenu简介 Xcode9的无线调试 环境:Xcode9-beta5 iOS-beta5 新的Macbook已经将充...
-
16
QQ 群聊天记录 001 号:关于盗版书的讨论¶ 在我创建的两个技术 QQ 群里面, 时不时会出现一些有趣的讨论内容, 有群友建议我把这些内容记录下来并在网上进行分享, 我一直觉...
-
16
SSQ22667-001: An 80C186 for the Space Station
-
9
PHPLarge -- FuzzyOffice -- 001 - Constraints Aug 9, 2002 PHPLarge :: FuzzyOffice :: 001 - Constraints Last updated: 8/15/2002; 6:20:28 AM The FuzzyBlog...
-
7
数据库系列:业内主流MySQL数据中间件梳理
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK