文章分类 - Mysql
摘要:undo 日志 标签: MySQL 是怎样运行的 事务回滚的需求 我们说过事务需要保证原子性,也就是事务中的操作要么全部完成,要么什么也不做。但是偏偏有些时候做到一半的时候会出一些情况,比如: 情况一:事务执行过程中可能遇到各种错误,比如服务器本身的错误,操作系统错误,甚至是突然断电导致的错误。 情
阅读全文
摘要:redo 日志(下) 标签: MySQL 是怎样运行的 redo日志文件 redo日志刷盘时机 我们前边说mtr运行过程中产生的一组redo日志在mtr结束时会被复制到log buffer中,可是这些日志总在内存里呆着也不是个办法,在一些情况下它们会被刷新到磁盘里,比如: log buffer空间不
阅读全文
摘要:redo日志(上) 标签: MySQL是怎样运行的 事先说明 本文以及接下来的几篇文章将会频繁的使用到我们前边唠叨的InnoDB记录行格式、页面格式、索引原理、表空间的组成等各种基础知识,如果大家对这些东西理解的不透彻,那么阅读下边的文字可能会有些吃力,为保证您的阅读体验,请确保自己已经掌握了我前边
阅读全文
摘要:事务简介 标签: MySQL 是怎样运行的 事务的起源 对于大部分程序员来说,他们的任务就是把现实世界的业务场景映射到数据库世界。比如银行为了存储人们的账户信息会建立一个account表: CREATE TABLE account ( id INT NOT NULL AUTO_INCREMENT C
阅读全文
摘要:InnoDB 的 Buffer Pool 标签: MySQL 是怎样运行的 缓存的重要性 通过前边的唠叨我们知道,对于使用InnoDB作为存储引擎的表来说,不管是用于存储用户数据的索引(包括聚簇索引和二级索引),还是各种系统数据,都是以页的形式存放在表空间中的,而所谓的表空间只不过是InnoDB对文
阅读全文
摘要:otpimizer trace 表的神奇功效 标签: MySQL 是怎样运行的 对于MySQL 5.6以及之前的版本来说,查询优化器就像是一个黑盒子一样,你只能通过EXPLAIN语句查看到最后优化器决定使用的执行计划,却无法知道它为什么做这个决策。这对于一部分喜欢刨根问底的小伙伴来说简直是灾难:“我
阅读全文
摘要:Explain 详解(下) 标签: MySQL 是怎样运行的 执行计划输出中各列详解 本章紧接着上一节的内容,继续唠叨EXPLAIN语句输出的各个列的意思。 Extra 顾名思义,Extra列是用来说明一些额外信息的,我们可以通过这些额外信息来更准确的理解MySQL到底将如何执行给定的查询语句。My
阅读全文
摘要:Explain 详解(上) 标签: MySQL 是怎样运行的 一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,这个执行计划展示了接下来具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执行查询等等。设计MySQL的大叔贴心的为我
阅读全文
摘要:基于规则的优化 标签: MySQL 是怎样运行的 大家别忘了MySQL本质上是一个软件,设计MySQL的大叔并不能要求使用这个软件的人个个都是数据库高高手,就像我写这本书的时候并不能要求各位在学之前就会了里边儿的知识。 吐槽一下:都会了的人谁还看呢,难道是为了精神上受感化? 也就是说我们无法避免某些
阅读全文
摘要:InnoDB 统计数据是如何收集的 标签: MySQL 是怎样运行的 我们前边唠叨查询成本的时候经常用到一些统计数据,比如通过SHOW TABLE STATUS可以看到关于表的统计数据,通过SHOW INDEX可以看到关于索引的统计数据,那么这些统计数据是怎么来的呢?它们是以什么方式收集的呢?本章将
阅读全文
摘要:基于成本的优化 标签: MySQL 是怎样运行的 什么是成本 我们之前老说MySQL执行一个查询可以有不同的执行方案,它会选择其中成本最低,或者说代价最低的那种方案去真正的执行查询。不过我们之前对成本的描述是非常模糊的,其实在MySQL中一条查询语句的执行成本是由下边这两个方面组成的: I/O成本
阅读全文
摘要:连接的原理 标签: MySQL 是怎样运行的 搞数据库一个避不开的概念就是Join,翻译成中文就是连接。相信很多小伙伴在初学连接的时候有些一脸懵逼,理解了连接的语义之后又可能不明白各个表中的记录到底是怎么连起来的,以至于在使用的时候常常陷入下边两种误区: 误区一:业务至上,管他三七二十一,再复杂的查
阅读全文
摘要:单表访问方法 标签: MySQL 是怎样运行的 对于我们这些MySQL的使用者来说,MySQL其实就是一个软件,平时用的最多的就是查询功能。DBA时不时丢过来一些慢查询语句让优化,我们如果连查询是怎么执行的都不清楚还优化个毛线,所以是时候掌握真正的技术了。我们在第一章的时候就曾说过,MySQL Se
阅读全文
摘要:InnoDB 的表空间 标签: MySQL 是怎样运行的 通过前边儿的内容大家知道,表空间是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件;对于每个独立表空间来说,对应着文件系统中一个名为表名.ibd的实际文件。大家可以把表空间想象成被切分为许许多多个页的池子,当我们想为某个
阅读全文
摘要:MySQL 的数据目录 标签: MySQL 是怎样运行的 数据库和文件系统的关系 我们知道像InnoDB、MyISAM这样的存储引擎都是把表存储在磁盘上的,而操作系统用来管理磁盘的那个东东又被称为文件系统,所以用专业一点的话来表述就是:像 InnoDB 、 MyISAM 这样的存储引擎都是把表存储在
阅读全文
摘要:B+树索引的使用 标签: MySQL 是怎样运行的 我们前边详细、详细又详细的唠叨了InnoDB存储引擎的B+树索引,我们必须熟悉下边这些结论: 每个索引都对应一棵B+树,B+树分为好多层,最下边一层是叶子节点,其余的是内节点。所有用户记录都存储在B+树的叶子节点,所有目录项记录都存储在内节点。 I
阅读全文
摘要:B+树索引 标签: MySQL是怎样运行的 前边我们详细唠叨了InnoDB数据页的7个组成部分,知道了各个数据页可以组成一个双向链表,而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表,每个数据页都会为存储在它里边儿的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分
阅读全文
摘要:InnoDB 数据页结构 标签: MySQL 是怎样运行的 不同类型的页简介 前边我们简单提了一下页的概念,它是InnoDB管理存储空间的基本单位,一个页的大小一般是16KB。InnoDB为了不同的目的而设计了许多种不同类型的页,比如存放表空间头部信息的页,存放Insert Buffer信息的页,存
阅读全文
摘要:InnoDB记录存储结构 标签: MySQL 是怎样运行的 准备工作 到现在为止,MySQL对于我们来说还是一个黑盒,我们只负责使用客户端发送请求并等待服务器返回结果,表中的数据到底存到了哪里?以什么格式存放的?MySQL是以什么方式来访问的这些数据?这些问题我们统统不知道,对于未知领域的探索向来就
阅读全文
摘要:字符集和比较规则 标签: MySQL 是怎样运行的 字符集和比较规则简介 字符集简介 我们知道在计算机中只能存储二进制数据,那该怎么存储字符串呢?当然是建立字符与二进制数据的映射关系了,建立这个关系最起码要搞清楚两件事儿: 你要把哪些字符映射成二进制数据? 也就是界定清楚字符范围。 怎么映射? 将一
阅读全文