mysql运行原理笔记-连接的原理

连接的原理连接过程简介从本质上来说,连接就是把各个表中的记录都取出来进行依次匹配,并把匹配后的组合发送给客户端。把t1和t2两个表连接起来的过程如图所示。这个过程看起来就是把t1表中的记录和t2表中的记录连起来组成一个新的更大的记录,所以这个查询过程称为连接查询。如果连接查询的结果集中包含一个表中的

mysql运行原理笔记-基于规则的优化

外连接消除前文说过,内连接的驱动表和被驱动表的位置可以相互交换,而左外连接和右外连接的驱动表与被驱动表是固定的。这就导致了内连接可以通过优化表的连接顺序来降低整体的查询成本,而外连接却无法优化表的连接顺序。外连接和内连接的本质区别就是:对于外连接的驱动表的记录来说,如果无法在被驱动表中找到匹配ON子

mysql运行原理笔记-事务隔离级别和MVCC

事务隔离级别和MVCC事务隔离级别我们知道,MySQL是一个客户端/服务端架构的软件。对于同一个服务器来说,可以有多个客户端与之连接。每个客户端与服务端建立连接之后,就形成了一个会话。每个客户端都可以在自己的会话中向服务器发送请求语句,一个请求语句可能是某个事务的一部分。服务器可以同时处理来自多个客

mysql运行原理笔记-锁

解决并发事务带来问题的两种基本方式并发事务访问相同记录的情况大致可以划分为3种。读-读情况:并发事务相继续读取相同的记录。读取操作本身不会对记录有任何影响,不会引起什么问题,所以允许这种情况的发生。写-写情况:并发事务相继对相同的记录进行改动。读-写或者写-读情况:也就是一个事务进行读取操作,另一个

mysql运行原理笔记-redo日志和undo日志

事务隔离级别和MVCC事务隔离级别我们知道,MySQL是一个客户端/服务端架构的软件。对于同一个服务器来说,可以有多个客户端与之连接。每个客户端与服务端建立连接之后,就形成了一个会话。每个客户端都可以在自己的会话中向服务器发送请求语句,一个请求语句可能是某个事务的一部分。服务器可以同时处理来自多个客

mysql运行原理笔记-事务

事务简介事务的起源对于大部分程序来说,他们的任务就是把现实世界的业务场景映射到数据库世界中。原子性(Atomicity)在现实世界中,转账操作是一个不可分割的操作。如果在执行操作的过程中发生了错误,就把已经执行的操作恢复成没有执行之前的样子。隔离性(Isolation)对于现实世界中状态转换对应的某

mysql运行原理笔记-InnoDB的BufferPool

InnoDB的BufferPool缓存的重要性InnoDB存储引擎在处理客户端请求时,如果需要访问某个页的数据,就会把完整的页中的数据全部加载到内存中。也就是说,即使只需要访问一个页的一条记录,也需要先把整个页的数据加载到内存中。将整个页加载到内存中后就可以进行读写访问了,而且在读写访问之后并不着急

mysql运行原理笔记-explain

EXPLAIN详解EXPLAIN语句输出各个列的作用列明描述id在一个大的查询语句中,每个SELECT关键字都对应一个唯一的idselect_typeSELECT关键字对应的查询类型table表名partitions匹配的分区信息type针对单表的访问方法possible_keys可能用到的索引ke

mysql运行原理笔记-成本优化

基于成本的优化什么是成本一条查询语句在MYSQL中执行成本是由两个方面组成的。IO成本,我们的表经常使用的MyISAM、InnoDB存储引擎都是将数据和索引存储到磁盘上。当查询表中的记录时,需要先把数据或者索引加载到内存中,然后再进行操作。这个从磁盘到内存的加载过程损耗的时间称为IO成本。CPU成本

mysql运行原理笔记-B+树索引

B+数索引各个数据页可以组成一个双向链表,而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表。每个数据页都会为存储在它里面的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速定位找到指定的记录。其中,页a、页