《MySQL 是怎样运行的:从根儿上理解 MySQL》笔记

MySQL 是怎样运行的:从根儿理解 MySQL(下).pdf 立即下载

首先,8折优惠码了解一下,比公众号的9折给力。

![8折优惠](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMzU3MjYzMy04ZjFlY2JhODMwYWFmM2E0LnBuZw?x-oss-process=image/format,png

重新认识MySQL

  1. 前面主要是一些安装使用MySQL的过程,没必要记笔记
  2. 客户端与服务器连接过程,MySQL支持一下三种客户端进程与服务端进程通讯方式:
    1. TCP/IP
    2. 命名管道和共享内存(Windows操作系统中的两种进程间通信方式)
    3. Unix域套接字文件
  3. 服务器处理客户端请求过程
    1. 连接管理
      服务器进程会为每个连接进来的客户端分配一个线程,当客户端断开连接时候,不会马上销毁该线程,而是缓存起来,这样节省开销。线程分配过多会影响性能,所以可以限制同时连接到服务器的客户端数量。
    2. 解析与优化
      • 查询缓存
        • 命中缓存:一样的请求
        • 不命中
          • 两次请求有任何字符的不同,都不命中
          • 请求中包含系统函数,用户自定义变量与函数,一些系统表,比如使用now()函数
        • 缓存失效:缓存系统检测涉及到的每张表,只要表的结构或者数据修改,缓存就失效并删除。
      • 语法优化
        • 判断语法是否正确,将文本中要查询的表、各种查询条件提取出来放到MySQL服务器内部使用的一些数据结构上来。本质上是一个编译过程。
      • 查询优化
        • 优化查询效率,优化的结果就是生成一个执行计划。可以使用EXPLAIN语句查看执行计划。
    3. 存储引擎
      • 负责数据的存储和提取。
      • MySQL曾提供统一接口。
      • 常用InnoDBMyISAM
      • 查看支持的存储引擎。
        执行效果
        • Transactions:是否支持事物
        • XA:是否支持分布式事务
        • Savepoints:是否支持部分事务回滚

启动选项和配置文件

  1. 可以通过启动选项或者配置文件设置
  2. 系统变量中的SESSIONGLOBAL
    • SET [GLOBAL|SESSION] 系统变量名 = 值;
    • SET [@@(GLOBAL|SESSION).]var_name = XXX;
    • GLOBAL:全局变量,影响服务器整体
    • SESSION:回话(local)变量,影响某个客户端的操作
    • 设置变量时候默认作用范围是SESSION,设置时候需要注意。
    • 有的系统变量没有作用范围,有的系统变量只读不可设置
  3. 状态变量
    • 显示程序运行状态,不可设置
    • GLOBALSESSION
    • SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式];
    • 同样默认是SESSION

字符集和比较规则

  1. 一种字符集可以有很多种规则

  2. 常用字符集

    • ASCII
    • ISO 8859-1latin1
    • GB2312
    • GBK
    • UTF-8
  3. MySQL支持的字符集和排序规则

    • utf8mb3:阉割版utf8,使用1-3个字节表示字符。
    • utf8mb4:正式版,使用1-4个字节表示字符。
    • 查看支持的字符集
      SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式];
  4. 查看MySQL支持的比较规则
    SHOW COLLATION [LIKE 匹配的模式];

    • 比较规则的命名
      • 字符集_语言_后缀
      • 后缀的含义
        • _ai:不区分重音
        • _as:区分重音
        • _ci:不区分大小写
        • cs:区分大小写
        • _bin:以二进制比较
  5. 字符集和比较规则的应用

    1. MySQL有四个级别的字符集和比较规则
      • 服务器级别:
        • 查看:character_set_servercollation_server
        • 配置:启动时,配置文件或者启动项设置character_set_server=gbk collation_server=gbk_chinese_ci两个变量。运行时通过set语句修改以上两个变量的值来修改。
      • 数据库级别:
        • 查看:character_set_database collation_database ,注意这两个变量是只读的。
        • 配置:建库时候配置,若未配置使用服务器级别的。也可以使用ALTER DATABASE语句修改。
      • 表级别
        - 查看:查看建表语句。
        - 配置:建表时候设置,若未设置使用数据库级别默认的。已存在的表通过ALTER TABLE语句修改。
    • 列级别
      • 查看:查看建表语句。
      • 配置:建表时未配置使用表默认的。存在的使用ALTER TABLE table_name MODIFY column ...语句修改。
    1. 只修改字符集,比较规则变为字符集默认的。
      只修改比较规则,字符集变成比较规则对应的。
  6. 客户端和服务器通信的字符集

    1. MySQL中字符集的转换
      • 转换过程中使用的3个系统变量
        • character_set_client服务器解码请求时使用的字符集,服务器会认为客户端发送过来的请求是此变量对应的字符集编码的,若不是则会出错。
        • character_set_connection 服务器处理请求时会把请求字符串从character_set_client转为character_set_connection
        • character_set_results 服务器向客户端返回数据时使用的字符集,客户端需要使用这个字符集来解码。
    2. SET NAMES 字符集名,可以将以上三个系统变量设置为同一个值。

InnoDB记录存储结构

  1. 由于磁盘相对于内存等比较慢,一条条读取代价太高。所以InnoDB将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为 16 KB。一般情况下,一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中。
    • SHOW GLOBAL STATUS like 'Innodb_page_size';查看页大小

InnoDB数据页结构

B+树索引

B+树索引的使用

MySQL的数据目录

InnoDB的表空间

单表访问方法

连接的原理

MySQL给予成本的优化

InnoDB统计数据的收集

MySQL基于规则的优化

Explain

  • id
    1. 查询优化器可能对设计子查询的查询语句进行重写,从而转换为连接查询。所以如果想知道查询优化器是否对某个包含子查询的语句进行了重写,查看执行计划中各个表的id值就行。
  • select_type
    • SIMPLE
      查询语句中不包含UNION或子查询,连接查询也是
    • PRIMARY
      包含UNION、UNION ALL或者子查询的大查询,最左边的查询
    • UNION
      UNION或者UNION AL,除了最左边的查询,其余的查询
    • UNION RESULT
      MySQL使用临时表完成UNION的去重,该临时表的查询
    • SUBQUERY
      如果包含子查询的查询语句不能转为semi-join,且该子查询是不相关子查询,并且查询优化器决定将该子查询物化来执行,该子查询的第一个SELECT关键字代表的查询就是SUBQUERY(SUBQUERY的子查询只会执行一次)
    • DEPENDENT SUBQUERY
      如果包含子查询的查询语句不能转为semi-join,且该子查询是相关子查询,则该子查询的第一个SELECT关键字代表的那个查询就是DEPENDENT SUBQUERY(DEPENDENT SUBQUERY的子查询可能执行多次)
    • DEPENDENT UNION
      在包含UNION或UNION ALL的大查询中,如果各个小查询都依赖外层查询,拿出了最左边的那个小查询外,其余的小查询就是DEPENDENT UNION
    • DERIVED
      采用物化的方式执行的包含派生表的查询,该派生表对应的子查询就是DERIVED
    • MATERIALIZED
      查询优化器选择将包含子查询的语句的子查询物化之后与外层查询进行连接查询时,该子查询就是MATERIALIZED
    • UNCACHEABLE SUBQUERY
    • UNCACHEABLE UNION
  • partitions
    分区
  • type

这里我画了个巨大的思维导图来整理笔记,也可以点击链接查看:MySQL笔记整理,需要注意的是,这里只是笔记,版权归小册作者所有,详细内容请购买小册查看。
在这里插入图片描述

MySQL是怎样运行的(仅限学习使用) 立即下载

相关推荐

MySQL学习资料PDF

MySQL必知必会.pdf 高性能MySQL(第3版).pdf MySQL 技术内幕:InnoDB存储引擎.pdf

MySQL是怎样运行的:从根儿理解MySQL

MySQL是怎样运行的:从根儿理解MySQL

MySQL 是怎样运行的:从根儿理解 MySQL(上).pdf

MySQL 是怎样运行的:从根儿理解 MySQL(上).pdf

Mysql是怎样运行的》

mysql安装、系统变量、字符集和比较规则、InnoDB、B+树索引、数据目录、表空间、连接原理、成本优化、sql优化、explain使用、事务

qq_35572013的博客 5098

MySQL是怎么运行的》阅读笔记

Mysql是由两部分构成,一部分是服务器程序,一部分是客户端程序。服务器程序又包括两部分:第一部分server层包括连接器、查询缓存、分析器、优化器、执行器等。涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等第二部分是存储引擎层负责数据的存储和提取。存储引擎有多种选择,主要有InnoDB、MyISAM、Memory等。要操作Mysql数据库,首先客户端要连接上mysql服务器程序。

qq_44788518的博客 2606

MySQL 是怎样运行的:从根儿理解 MySQL 》优质笔记

https://blog.csdn.net/qq_31941921/article/details/121775387 MySQL里的锁_小明的笔记仓库的博客-CSDN博客

一蓑烟雨任平生 735

mysql是怎样运行的 从根儿 百度云_读书笔记-MySQL 是怎样运行的:从根儿理解 MySQL...

mysqld_safemysqld_safe是一个启动脚本,它会间接的调用mysqld,而且还顺便启动了另外一个监控进程,这个监控进程在服务器进程挂了的时候,可以帮助重启它。另外,使用mysqld_safe启动服务器程序时,它会将服务器程序的出错信息和其他诊断信息重定向到某个文件中,产生出错日志,这样可以方便我们找出发生错误的原因mysql.servermysql.server也是一个启动脚本,它...

weixin_39625586的博客 1878

MySQL是怎样运行的:从根儿理解MySQL》阅读笔记————5.InnoDB数据页结构

红字是我的读后提炼出的比较重要的信息。黑字速读就可以,红字是需要看懂的信息。数据页概念:数据页是InnoDB管理存储空间的基本单位,一个页大小一般为16KB。InnoDB设计了不通类型的页,比如:存放表空间头部信息的页,存放Inert Buffer信息的页,存放INOOE信息的页,存放undo日志信息的页等等。下面我们只讨论存放我们表中记录的那种类型的页,这种存放表中记录的页就叫索引页,也是我们常说的数据页。我们要清楚一个概念再InnoDB下,索引就是数据,数据就是索引。

zyjzyjjyzjyz的博客 395

MySQL是怎样运行的:从根儿理解MySQL》阅读笔记————6.B+树索引

相同点:1、页面类型都是索引页(数据页),上一章的File Header的类型2、页的组成都是相同的,上一章介绍的7个部分3、并且在页内都会为主键在Page Directory生成槽,从而可以按照主键值进行查找时,可以使用二分法加速查找。例子查找主键20的页(从目录项记录页开始):1、先到存储目录项记录的页,上图页30二分快速定位(页内二分不再赘述),因为12

zyjzyjjyzjyz的博客 290

读书笔记----MySQL是怎样运行的:从根上理解MySQL(第一章至第五章)

读书笔记----MySQL是怎样运行的:从根上理解MySQL(第一章至第五章),方便大家更容易读懂书中的重点知识

hxmagic的博客 2356

MySQL笔记-基本架构

说明本文以及接下来的几篇 MySQL 笔记是本人在「极客时间」的专栏『MySQL实战45讲』和掘金小册「MySQL 是怎样运行的:从根儿理解 MySQL」的学习笔记整理...

WriteOnRead 333

MySQL 是怎样运行的:从根儿理解 MySQL

MySQL 是怎样运行的:从根儿理解 MySQL小孩子 著12 小时 · 25 小节从根儿理解 MySQL,让 MySQL 不再是一个黑盒小册内容小册介绍MySQL...

codehole_的博客 9666

mysql是怎样运行的 从根儿 百度云_MySQL 是怎样运行的:从根儿理解 MySQL|完结|百度云下载...

-代码开始-/MySQL 是怎样运行的:从根儿理解 MySQL [13.8M]┣━━[天下无鱼][shikey.com]0万里长征第一步(非常重要) —— 如何愉快的阅读本小册(01).md [9.8K]┣━━[天下无鱼][shikey.com]0万里长征第一步(非常重要) —— 如何愉快的阅读本小册(02).pdf [617.3K]┣━━[天下无鱼][shikey.com]10条条大路通罗马 ...

weixin_35203997的博客 7316

MySQL是怎样运行的:从根儿理解MySQL | 锁

文章目录前言:本博文是对MySQL是怎样运行的:从根儿理解MySQL这本书的归纳和总结第25章 工作面试老大难-锁1.解决并发事务带来问题的两种基本方式1.1 并发事务访问相同记录的情况的三种情况 前言:本博文是对MySQL是怎样运行的:从根儿理解MySQL这本书的归纳和总结 第25章 工作面试老大难-锁 1.解决并发事务带来问题的两种基本方式 1.1 并发事务访问相同记录的情况的三种情况 ...

光看不点赞的博客 5960

【亲测免费】 《MySQL是怎样运行的:从根儿理解MySQL》PDF下载

MySQL是怎样运行的:从根儿理解MySQL》PDF下载 【下载地址】MySQL是怎样运行的从根儿理解MySQLPDF下载 《MySQL是怎样运行的:从根儿理解MySQL》是一本深入解析MySQL数据库内部机制的书籍,适合希望从底层原理到实际应用全面掌握MySQL的读者。本书详细介绍了MySQL的架构设计、存储引...

gitblog_06714的博客 1344

MySQL是怎样运行的:从根儿理解MySQL | 查询优化器(二):基于规则的优化

也就是说:在这种情况下:外连接和内连接也就没有什么区别了。

光看不点赞的博客 3612

读《MySQL是怎样运行的》笔记记录

读《MySQL是怎样运行的》笔记记录

weixin_52259848的博客 4324
上一篇: 关于ThreadPoolExecutor
下一篇: MySQL创建函数错误 ER_BINLOG_UNSAFE_ROUTINE; SQLSTATE: HY000
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值