随笔分类 - MySQL理论
摘要:随着MySQL版本的发展,优化器是越来越智能,优化器开关也越来越多,本文给大家分享一下MySQL对derived table的优化处理。 何为derived table?这里我把它翻译成派生表,简单来讲,就是将from 子句中出现的检索结果集当做一张表,比如from 一个select构造的子查询,这
阅读全文
摘要:衍生表的优化:合并 | 具化 一、mysql优化器对于衍生表的优化处理可以从两方面进行: 将衍生表合并到外部查询 将衍生表具化为内部临时表 1、示例 1: SELECT * FROM (SELECT * FROM t1) AS derived_t1; 衍生表 derived_t1 合并处理后,实际执
阅读全文
摘要:Adaptive Hash Index(以下简称 AHI)估计是 MySQL 的各大特性中,大家都知道名字但最说不清原理的一个特性。本期图解我们为大家解析一下 AHI 是如何构建的。 首先我们思考一下 AHI 是为了解决什么问题: 随着 MySQL 单表数据量增大,(尽管 B+ 树算法极好地控制了树
阅读全文
摘要:一、本文想解决什么问题 二、如何识别需要排序 三、如何利用索引优化排序 四、排序的几种模式 4.1、实际trace结果 4.2、排序模式概览 4.2.1、回表排序模式 4.2.2、不回表排序模式 4.2.3、打包数据排序模式 4.2.4、三种模式比较 五、外部排序 5.1、普通外部排序 5.1.1、
阅读全文
摘要:前言 排序是数据库中的一个基本功能,MySQL也不例外。用户通过Order by语句即能达到将指定的结果集排序的目的,其实不仅仅是Order by语句,Group by语句,Distinct语句都会隐含使用排序。本文首先会简单介绍SQL如何利用索引避免排序代价,然后会介绍MySQL实现排序的内部原理
阅读全文
摘要:mysql double write (二次写)是mysql innodb存储引擎的一个重要特性,本人这两天翻阅了相关的资料,结合自己已有的知识,说说自己对double write的理解,供各位看官参考。 页断裂(partial write) double write技术innodb为解决页断裂(p
阅读全文
摘要:行溢出的临界点 那发生行溢出的临界点是什么呢?也就是说在列存储多少字节的数据时就会发生行溢出? MySQL中规定一个页中至少存放两行记录,至于为什么这么规定我们之后再说,现在看一下这个规定造成的影响。以上边的varchar_size_demo表为例,它只有一个列c,我们往这个表中插入两条记录,每条记
阅读全文
摘要:事务的ACID理论什么是ACID理论?ACID的四个特性ACID中C与CAP定理中C的区别?MySQL事务的隔离级别事务操作可能会出现的数据问题事务操作可能出现的更新丢失问题事务的隔离级别标准与实现小结MySQL SQL命令模拟测试相关问题InnoDB的RR级别下其实有部分场景还是会出现不可重复读问
阅读全文
摘要:前提概要什么是MVCC什么是当前读和快照读?当前读,快照读和MVCC的关系MVCC实现原理隐式字段undo日志Read View(读视图)整体流程MVCC相关问题RR是如何在RC级的基础上解决不可重复读的?RC,RR级别下的InnoDB快照读有什么不同? 前提概要什么是MVCC?MVCCMVCC,全
阅读全文
摘要:正确的理解MySQL的乐观锁,悲观锁与MVCC如果觉得对你有帮助,能否点个赞或关个注,以示鼓励笔者呢?!博客目录 | 先点这里 !首先声明,MySQL的测试环境是5.7 前提概念数据库并发的三种场景乐观锁和悲观锁的澄清悲观锁什么是悲观锁?悲观锁的实现悲观锁的优点和缺点乐观锁什么是乐观锁?乐观锁的实现
阅读全文
摘要:1:innodb 更新以页为单位 2:日志太多,binlog,redolog,undolog 3:doublewrite双写数据重复写入 4:页的分裂与合并
阅读全文
摘要:今天主要介绍下mysql一个崩溃恢复很重要的特性-重复写入。 doublewrite缓冲区是位于系统表空间中的存储区域,在该区域中,InnoDB会在将页面写入数据文件中的适当位置之前,从InnoDB缓冲池中刷新这些页面。仅在刷新页面并将其写入doublewrite缓冲区后,InnoDB才会将页面写入
阅读全文
摘要:MySQL 8.0新增特性use_invisible_indexes 是否使用不可见索引,MySQL 8.0新增可以创建invisible索引,这一开关控制优化器是否使用invisible索引,on表示考虑使用。MySQL 5.7新增derived_merge 派生表合并,类似Oracle的视图合并
阅读全文
摘要:MySQL在处理join查询时,遍历驱动表的记录,把驱动表的记录传递给被驱动表,然后根据join连接条件进行匹配。优化器通常会将更小的表作为驱动表,通过在驱动表上做额外的where条件过滤(Condition Filtering),能够将驱动表限制在一个更小的范围,以便优化器能够做出更优的执行计划。
阅读全文
摘要:5.7中当出现数据大量切斜的时候执行计划依然能够得到正确的执行计划。比如性别列索引,其中30行,29行为男性,1行为女性,下面是执行计划示例: mysql> set eq_range_index_dive_limit=100; Query OK, 0 rows affected (0.00 sec)
阅读全文
摘要:背景 InnoDB作为事务性引擎,使用write-ahead logging(WAL)机制保证ACID中的Atomicity和Durability,使用undo机制保证ACID中的Consistency和Isolation。 按照WAL和undo的机制,形成以下两个原则: 数据块的更改需要先记录re
阅读全文
摘要:提要 相对于纳秒级的内存访问延时,普通的机械盘达到了毫秒级的随机访问延时,对于OLTP应用来说,物理IO绝对是目前数据库管理系统的最大性能杀手,所以增加内存的大小,提高IO的命中率无疑可以作为一种降低时延的常用优化手段。 针对使用InnoDB引擎的MySQL实例来说,增加buffer pool的大小
阅读全文
摘要:背景 innodb_flush_log_at_trx_commit 这个参数可以说是InnoDB里面最重要的参数之一,它控制了重做日志(redo log)的写盘和落盘策略。 具体的参数意义见手册 简单说来,可选值的安全性从0->2->1递增,分别对应于mysqld 进程crash可能丢失 -> OS
阅读全文