随笔分类 - MySQL
摘要:本篇已收录在 "MySQL 是怎样运行的 学习笔记系列" MVCC(多版本并发控制)原理 版本链 对于使用InnoDB存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列(row_id并不是必要的,我们创建的表中有主键或者非NULL的UNIQUE键时都不会包含row_id列): trx_id:
阅读全文
摘要:本篇已收录在 "MySQL 是怎样运行的 学习笔记系列" 共享锁和独占锁 共享锁,英文名:Shared Locks,简称S锁。在事务要读取一条记录时,需要先获取该记录的S锁。 独占锁,也常称排他锁,英文名:Exclusive Locks,简称X锁。在事务要改动一条记录时,需要先获取该记录的X锁。 假
阅读全文
摘要:本篇已收录在 "MySQL 是怎样运行的 学习笔记系列" 缓存的重要性 InnoDB存储引擎在处理客户端的请求时,当需要访问某个页的数据时,就会把完整的页的数据全部加载到内存中,也就是说即使我们只需要访问一个页的一条记录,那也需要先把整个页的数据加载到内存中。将整个页加载到内存中后就可以进行读写访问
阅读全文
摘要:本篇已收录在 "MySQL 是怎样运行的 学习笔记系列" 一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个所谓的 ,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执行查询等等。 mysql 为我们提供了 语句来帮助我们查看某个查询语句的具体 : explain
阅读全文
摘要:本篇已收录在 "MySQL 是怎样运行的 学习笔记系列" 条件化简 我们编写的查询语句的搜索条件本质上是一个表达式,这些表达式可能比较繁杂,或者不能高效的执行,MySQL的查询优化器会为我们简化这些表达式。 移除不必要的括号 有时候表达式里有许多无用的括号,比如这样: ((a = 5 AND b =
阅读全文
摘要:本篇已收录在 "MySQL 是怎样运行的 学习笔记系列" mysql 执行查询的成本 I/O成本 我们的表经常使用的MyISAM、InnoDB存储引擎都是将数据和索引都存储到磁盘上的,当我们想查询表中的记录时,需要先把数据或者索引加载到内存中然后再操作。这个从磁盘到内存这个加载的过程损耗的时间称之为
阅读全文
摘要:本篇已收录在 "MySQL 是怎样运行的 学习笔记系列" 连接简介 连接的本质 连接的本质就是把各个连接表中的记录都取出来依次匹配的组合加入结果集并返回给用户。所以我们把t1和t2两个表连接起来的过程如下图所示: 连接查询的结果集中包含一个表中的每一条记录与另一个表中的每一条记录相互匹配的组合,像这
阅读全文
摘要:本篇已收录在 "MySQL 是怎样运行的 学习笔记系列" MySQL Server有一个称为查询优化器的模块,一条查询语句进行语法解析之后就会被交给查询优化器来进行优化,优化的结果就是生成一个所谓的执行计划,这个执行计划表明了应该使用哪些索引进行查询,表之间的连接顺序是啥样的,最后会按照执行计划中的
阅读全文
摘要:本篇已收录在 "MySQL 是怎样运行的 学习笔记系列" 表空间是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件;对于每个独立表空间来说,对应着文件系统中一个名为表名.ibd的实际文件。大家可以把表空间想象成被切分为许许多多个页的池子,当我们想为某个表插入一条记录的时候,就从
阅读全文
摘要:本篇已收录在 "MySQL 是怎样运行的 学习笔记系列" 数据库和文件系统的关系 什么是文件系统, 操作系统用来管理磁盘的被称为文件系统 像 InnoDB 、 MyISAM 这样的存储引擎都是把表存储在文件系统上的。当我们想读取数据的时候,这些存储引擎会从文件系统中把数据读出来返回给我们,当我们想写
阅读全文
摘要:本篇已收录在 "MySQL 是怎样运行的 学习笔记系列" 使用索引的代价 在熟悉了B+树索引原理之后,本篇文章的主题是唠叨如何更好的使用索引,虽然索引是个好东西,可不能乱建,在介绍如何更好的使用索引之前先要了解一下使用这玩意儿的代价,它在空间和时间上都会拖后腿: 空间上的代价: 这个是显而易见的,每
阅读全文
摘要:通过学习 MySQL 是怎样运行的: 从根儿上理解 MySQL, 了解一些平时没有注意的点和细节, 形成了这个系列的读书笔记, 温故而知新. mysql 学习 - 认识MySQL mysql 学习 - 乱码问题 mysql 学习 - 配置项 mysql 学习 - InnoDB的行 mysql 学习
阅读全文
摘要:本篇已收录在 "MySQL 是怎样运行的 学习笔记系列" 我们已经知道在单一数据页中查找数据时, 如果查找条件是主键的话, 可以使用二分法定位槽, 然后顺序遍历槽中的数据查找指定数据. 但是我们并不知道如何在数以万计的页中定位数据在哪个页中, 在没有索引的情况下,不论是根据主键列或者其他列的值进行查
阅读全文
摘要:本篇已收录在 "MySQL 是怎样运行的 学习笔记系列" 页 InnoDB是一个将表中的数据存储到磁盘上的存储引擎,所以即使关机后重启我们的数据还是存在的。而真正处理数据的过程是发生在内存中的,所以需要把磁盘中的数据加载到内存中,如果是处理写入或修改请求的话,还需要把内存中的内容刷新到磁盘上. 不论
阅读全文
摘要:本篇已收录在 "MySQL 是怎样运行的 学习笔记系列" InnoDB行 我们平时是以记录为单位来向表中插入数据的,这些记录在磁盘上的存放方式也被称为行格式或者记录格式。InnoDB存储引擎到现在为止设计了4种不同类型的 ,分别是Compact、Redundant、Dynamic和Compresse
阅读全文
摘要:本篇已收录在 "MySQL 是怎样运行的 学习笔记系列" 本文介绍一些关于 mysql 的默认配置 启动服务器时的配置项 服务器允许同时连入的客户端的默认数量是 表的默认存储引擎是 , 切换其他的: 启动服务器程序的时候就禁止各客户端使用TCP/IP网络进行通信 或者 一些命令行参数: 在Windo
阅读全文
摘要:本篇已收录在 "MySQL 是怎样运行的 学习笔记系列" 字符集 mysql 存储数据比如字符串时, 是将字符串的内容根据定义好的 转义成为二进制序列, 再进行存储的. 这种转义的行为被称为 . 如果字符串中有字符是不存在于字符集当中的, 那么会被认为是 , 即使存进数据库, 再获取出来时也不会正常
阅读全文
摘要:本篇已收录在 "MySQL 是怎样运行的 学习笔记系列" MySql 属于 C/S 架构 我们日常使用MySQL的情景一般是这样的: 启动MySQL服务器程序 启动MySQL客户端程序并连接到服务器程序 在客户端程序中输入一些命令语句作为请求发送到服务器程序,服务器程序收到这些请求后,会根据请求的内
阅读全文

浙公网安备 33010602011771号