数据库 | 001-MySQL梳理系列(一)
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的提示 
优化器
- 对我们的SQL进行优化,得到更高的执行计划
 - 如有多个索引时确定要用那个索引
 - 当有多变联查
join时,查询表的顺序 - 对查询条件和语句的优化
 
执行器
- 首先校验是否有对这张表的访问权限,如果没有权限则会报错
 - 如果有,则根据引擎接口打开表进行数据的查询筛选
 
Buffer Pool
- 默认大小
128MB, 偏小 - 对于16核32G机器,可以分配2G内存,配置文件:
my.ini配置: 
[server]
innodb_buffer_pool_size = 2147483648
数据页
- 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
数据库 | 001-MySQL梳理系列(一)的更多相关文章
- Mysql优化系列(2)--通用化操作梳理
		
前面有两篇文章详细介绍了mysql优化举措:Mysql优化系列(0)--总结性梳理Mysql优化系列(1)--Innodb引擎下mysql自身配置优化 下面分类罗列下Mysql性能优化的一些技巧,熟练 ...
 - Mysql备份系列(1)--备份方案总结性梳理
		
mysql数据库备份有多么重要已不需过多赘述了,废话不多说!以下总结了mysql数据库的几种备份方案: 一.binlog二进制日志通常作为备份的重要资源,所以再说备份方案之前先总结一下binlog日志 ...
 - 2、ABPZero系列教程之拼多多卖家工具 更改数据库为Mysql
		
因为要部署项目到云服务器,不想在服务器上装SqlServer,所以需要把项目改为Mysql. 项目初始化 1.下载项目压缩包,前面文章已经说到,可以加群到群文件里下载.解压缩下载的项目源码,使用VS2 ...
 - Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录
		
Mysql最常用的三种备份工具分别是mysqldump.Xtrabackup(innobackupex工具).lvm-snapshot快照.前面分别介绍了:Mysql备份系列(1)--备份方案总结性梳 ...
 - 数据库 之MySQL 简单教程
		
So Easy系列之MySQL数据库教程 1. 数据库概述 1.1. 数据库概述 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和 ...
 - Mysql数据库的mysql Schema 究竟有哪些东西& 手工注入的基础要领
		
#查看数据库版本号 mysql> select @@version; +------------+ | @@version | +------------+ | 5.5.16-log | +- ...
 - 关于数据库管理系统DBMS--关系型数据库(MySQL/MariaDB)
		
数据库的结构(3种):层次,网状,关系型(用的最多): DBMS的三层模型: 视图层:面向最终用户: 逻辑层:面向程序员或DBA: 物理层:面向系统管理员: 关系型数据库管理系统——RDBMS: 主要 ...
 - EntityFramework Core 2.1重新梳理系列属性映射(一)
		
前言 满血复活啦,大概有三个月的时间没更新博客了,关于EF Core最新进展这三个月也没怎么去看,不知现阶段有何变化没,本文将以EF Core 2.1稳定版本作为重新梳理系列,希望对看本文的你有所帮助 ...
 - (转)MySQL优化系列
		
原文:http://blog.csdn.net/jack__frost/article/details/71194208 数据库,后端开发者必学,而且现在以MySQL居多.这个系列将系统化MySQL一 ...
 - Mysql数据库的mysql Schema 究竟有哪些东西& 手工注入的基础要领
		
#查看数据库版本号 mysql> select @@version; +------------+ | @@version | +------------+ | 5.5.16-log | +- ...
 
随机推荐
- 个人微信公众号搭建Python实现 -接收和发送消息-基本说明与实现(14.2.1)
			
@ 目录 1.原理 2.接收普通消息 3.接收代码普通消息代码实现 1.原理 2.接收普通消息 其他消息类似参考官方文档 3.接收代码普通消息代码实现 from flask import Flask, ...
 - Sharding-JDBC使用jasypt3.0及以上版本加密数据库连接密码
			
本文中介绍的是基于Sharding-JDBC 4.0和jasypt 3.0及其以上版本对数据库连接密码进行加密操作 引入依赖 项目的pom.xml中引入maven依赖 <dependency&g ...
 - Websocket---认识篇
			
为什么需要 WebSocket ? 了解计算机网络协议的人,应该都知道:HTTP 协议是一种无状态的.无连接的.单向的应用层协议.它采用了请求/响应模型.通信请求只能由客户端发起,服务端对请求做出应答 ...
 - NPOI导入excel
			
1.引用NPOI: using NPOI.HSSF.UserModel;using NPOI.HSSF.Util;using NPOI.SS.UserModel; 2.导出excel 1 privat ...
 - 线程方法wait()和notify()的使用
			
实现需求: 开启2个线程,1个线程对某个int类型成员变量加1,另外1个减1,但是要次序执行,即如果int型的成员变量是0,则输出01010101这样的结果 代码如下 1 package test; ...
 - LeetCode 面试题16.18.模式匹配
			
模式匹配 题目: 你有两个字符串,即pattern和value. pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式.例如,字符串" ...
 - Xamarin.Form 5.0: 新功能和控件以及调试改进
			
上周在.NET Conf 2020,Scott Hunter(.NET),Maddy Leger(微软移动开发工具-Xamarin项目经理)和David Ortinau(首席项目经理,移动开发人员工具 ...
 - aix5.3安装httpd服务
			
1.安装gcc(1)从IBM上下载 gcc-4.0.0-1.aix5.3.ppc.rpm gcc-cplusplus-4.0.0-1.aix5.3.ppc.rpm libgcc-4.0.0-1.aix ...
 - node.js中使用http-proxy-middleware请求转发给其它服务器
			
var express = require('express');var proxy = require('http-proxy-middleware'); var app = express(); ...
 - 计算机考研复试真题 N阶楼梯上楼问题
			
题目描述 N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式.(要求采用非递归) 输入描述: 输入包括一个整数N,(1<=N<90). 输出描述: 可能有多组测试数据,对于每组数据 ...