
MySQL
文章平均质量分 83
MySQL 原理与实践。
秀强
物有本末,事有终始。
展开
-
MySQL中回表的代价
对于下面这个查询语句来说:我们可以选择下面这两种方式来执行。对于使用 InnoDB 存储引擎的表来说,索引中的数据页都必须存放在磁盘中,等到需要时再加载到内存中使用。这些数据页会被存放到磁盘中的一个或者多个文件中,页面的页号对应着该页在磁盘文件中的偏移量。以 16KB 大小的页面为例,页号为 0 的页面对应着这些文件中偏移量为 0 的位置,页号为 1 的页面对立着这些文件中偏移量为 16KB 的位置。B+树的每层节点会使用双向链表连接起来,上一个节点和下一个节点的页号可以不必相邻。不过在实际实现中,I原创 2022-07-03 22:06:14 · 439 阅读 · 0 评论 -
MySQL 5.7 undo log 从入门到放弃
文章目录undo 日志的格式INSERT 操作对应的 undo 日志DELETE 操作对应的 undo 日志删除一条记录的 2 个阶段UPDATE 操作对应的 undo 日志不更新主键就地更新(in-place update)先删除旧记录,再插入新纪录更新主键增删改操作对二级索引的影响为事务分配 Undo 页面链表的详细过程undo 日志在崩溃恢复时的作用总结事务需要保证原子性。 但是偏偏有时候事务在执行到一半时会出现一些情况,比如下面这些情况:事务执行过程中可能遇到各种错误,比如服务器本身的错误、原创 2022-05-22 18:53:39 · 733 阅读 · 0 评论 -
长文详解 MySQL redo log 原理
文章目录redo 日志格式简单的 redo 日志类型复杂的 redo 日志格式举个例子redo 日志格式小结Mini-Transcation以组的形式写入 redo 日志Mini-Transaction 的概念redo 日志写入过程redo log blocklog block headerlog block trailerredo 日志缓冲区redo 日志写入 log bufferredo 日志文件刷盘时机redo 日志文件组redo 日志文件格式特殊 blocklog sequence numberfl原创 2022-04-10 23:09:24 · 2685 阅读 · 1 评论 -
MySQL 事务并发执行时的一致性问题
文章目录事务并发执行时遇到的一致性问题脏写(Dirty Write)脏读(Dirty Read)不可重复读(Non-Repeatable Read)幻读(Phantom)MySQL 中的幻读参考资料MySQL 是一个客户端/服务器架构的软件。对于同一个服务器来说,可以有多个客户端与之连接。每个客户端与服务器建立连接后,就形成了一个会话。每个客户端都可以在自己的会话中向服务器发出请求语句,一个请求语句可能是某个事务的一部分。服务器可以同时处理来自多个客户端的多个事务。在某个事务访问某个数据时,如要求其他试原创 2022-04-08 00:31:19 · 1806 阅读 · 0 评论 -
InnoDB 独立表空间结构
文章目录区区(extent)的概念区的 4 种状态XDES Entry段段的概念INODE Entry区区(extent)的概念对于 16KB 的页来说,连续的 64 个页就是一个区,也就是说一个区默认占用 1MB(16*64=1024KB) 空间大小。无论是系统表空间还是独立表空间,都可以看成是由若干个连续的区组成的,每 256 个区被划分成一组。每个组的最开始的几个页面类型是固定的。在表中的数据量很大时,为某个索引分配空间的时候就不再按照页为单位分配了,而是按照区为单位进行分配。区的 4原创 2022-03-13 21:18:31 · 655 阅读 · 0 评论 -
InnoDB 和 MyISAM 存储引擎的区别
文章目录环境区别InnoDB 索引方案MylSAM 索引方案环境index_demo 建表语句:mysql> CREATE TABLE index_demo( -> c1 INT, -> c2 INT, -> c3 CHAR(1), -> PRIMARY KEY (c1) -> ) ROW_FORMAT = COMPACT; Query OK, 0 rows affected (0.03 sec) 区别InnoDB:「数据即索引,索引即原创 2022-03-11 21:20:27 · 317 阅读 · 0 评论 -
【最佳实践】MySQL 索引性能优化
我们只为出现在 WHERE 子句中的列、连接子句中的连接列,或者出现在 ORDER BY 或 GROUP BY 子句中的列创建索引即可。对于某个查询来说,最简单粗暴的执行方案就是扫描表中的所有记录,判断每一条记录是否符合搜索条件。如果符合,就将其发送到客户端,否则就跳过该记录。这种执行方案也称为全表扫描。对于使用 InnoDB 存储引擎的表来说,全表扫描意味着从聚簇索引第一个叶子节点的第一条记录开始,沿着记录所在的单向链表向后扫描,直到最后一个叶子节点的最后一条记录。全表扫描是一种万能的执行方案,所有的查原创 2022-03-04 22:22:39 · 432 阅读 · 0 评论 -
【展开说说】InnoDB 索引页结构
文章目录前言数据页结构概览记录在页中存储Page Directory(页目录)Page Header(页面头部)File Header(文件头部)File Trailer(文件尾部)总结前言页是 InnoDB 管理存储空间的基本单位,一个页的大小一般是 16KB。InnoDB 为了不同的目的而设计了多种不同类型的页,比如存放表空间头部信息的页、存放 ChangeBuffer 信息的页、存放 INODE 信息的页、存放 undo 日志信息的页,等等。我们主要展开说说存放表中记录的那种类型的页,官方称这种存原创 2022-02-28 02:25:40 · 752 阅读 · 0 评论 -
【展开说说】InnoDB COMPACT 行格式
文章目录COMPACT 行格式记录的额外信息变长字段长度列表NULL 值列表记录头信息记录的真实数据我们平时都是以记录为单位向表中插入数据的,这些记录在磁盘上的存放形式也被称为行格式或者记录格式。目前已经存在的行格式有 COMPACT、REDUNDANT、DYNAMIC 和 COMPRESSED。COMPACT 行格式一条完整的记录其实可以被分为记录的额外信息和记录的真实数据两大部分。记录的额外信息这部分信息是服务器为了更好地管理记录而不得不额外添加的一些信息。这些额外信息分为 3 个部分,分别原创 2022-02-27 23:50:26 · 542 阅读 · 0 评论 -
【展开说说】InnoDB中的索引方案
文章目录环境前置知识目录项记录目录项记录和普通用户记录的异同InnoDB 中的索引方案 B+ 树聚簇索引总结环境MySQL:5.7存储引擎:InnoDB行格式:COMPACT字符集:ascii表结构:mysql> CREATE TABLE page_demo( -> c1 INT, -> c2 INT, -> c3 VARCHAR(1OOOO), -> PRIMARY KEY (c1) -> ) CHARSET=ascii ROW_FOR原创 2022-02-27 12:56:12 · 846 阅读 · 0 评论 -
《Mysql是怎样运行的》第三章&第四章内容概要
原创 2022-02-20 13:54:29 · 211 阅读 · 0 评论 -
MySQL 几种启动服务器方式的区别
文章目录mysqldmysqld_safemysql.servermysqld_multi类 UNIX 系统中 4 种启动服务器程序的区别。mysqldmysqld 可执行文件就表示 MySQL 服务器程序,运行这个可执行文件就可以直接启动一个 MySQL 服务器进程。mysqld_safemysqld_safe 是一个启动脚本,它会间接调用 mysqld 并持续监控服务器的运行状态。当服务器进程出现错误时,它还可以帮助重启服务器程序。另外,使用 mysqld_safe 启动 MySQL 服务器程原创 2022-02-19 19:40:25 · 1215 阅读 · 0 评论 -
《Mysql是怎样运行的》第二章读书笔记
启动选项和配置文件在程序启动时指定的设置项称之为启动选项(startup option),这些选项控制着程序启动后的行为。在命令行上使用启动选项如果我们想在启动服务器程序时就禁止各客户端使用TCP/IP网络进行通信,可以在启动服务器程序的命令行中添加skip-networking启动选项:mysqld --skip-networking在命令行中指定启动逃项时需要在逃项名前加上-前缀.另外,如果选项名是由多个单词构成的,它们之间可以由短划线-连接,也可以使用下划线_连接,也就是说skip-.原创 2022-02-13 22:51:21 · 641 阅读 · 0 评论 -
《Mysql是怎样运行的》第一章读书笔记
环境变量环境变量PATH是一系列路径的集合,各个路径之间使用冒号(:)隔离开。比如,在我的机器上,环境变量PATH的值为/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin。这个值表明,在我输入某个命令时,系统会在/usr/local/bin、/usr/bin、/bin、/usr/sbin和/sbin目录下按照顺序依次寻找输入的这个命令.如果寻找成功,则执行该命令.也可以修改这个环境变量PATH.把MySQL安装目录下的bin目录的绝对路径添加到PATH中.这样一..原创 2022-02-13 22:48:18 · 703 阅读 · 0 评论 -
MySQL调优之前缀索引实战
前缀索引实例说明 有时候需要索引很长的字符串,这会让索引变的大且慢,通常情况下可以使用某个列开始的部分字符串,这样大大的节约索引空间,从而提高索引效率,但这会降低索引的选择性,索引的选择性是指不重复的索引值和数据表记录总数的比值,范围从1/#T到1之间。索引的选择性越高则查询效率越高,因为选择性更高的索引可以让mysql在查找的时候过滤掉更多的行。 一般情况下某个列前缀的选择性也是足够...原创 2020-04-30 20:13:24 · 257 阅读 · 0 评论 -
MySQL调优之索引常见概念(最左前缀原则、索引下推等)
文章目录MySQL调优系列回表、覆盖索引、最左前缀原则、索引下推参考资料MySQL调优系列回表、覆盖索引、最左前缀原则、索引下推面试官:小伙子,回表是什么了解么?你略加思索后,答道:了解的。假设我们的 staff 表有一个主键索引和 name 字段的索引。当我们执行下面这条 SQL 时select * from staff where name = 'quintin'; 会先查...原创 2020-04-27 22:59:25 · 504 阅读 · 0 评论 -
【展开说说】MySQL调优系列之执行过程 explain
文章目录MySQL调优系列执行计划idselect_typetabletypepossible_keyskeykey_lenrefrowsextra参考资料MySQL调优系列MySQL调优之性能监控执行计划在企业的应用场景中,为了知道优化SQL语句的执行,需要查看SQL语句的具体执行过程,以加快SQL语句的执行效率。可以使用explain+SQL语句来模拟优化器执行SQL查询语句,从而知...原创 2020-09-09 19:11:27 · 569 阅读 · 0 评论 -
MySQL调优之性能监控
文章目录前言准备工作性能监控SHOW PROFILEMySQL Performance Schema查看数据库连接数参考资料前言MySQL:5.7存储引擎:InnoDB准备工作实操之前,先准备一个数据库,以便读者可以跟我进行一样的操作。在MySQL官网下载官网提供的数据库 sakila database。下载地址 https://dev.mysql.com/doc/index-o...原创 2020-04-25 20:26:04 · 1196 阅读 · 0 评论