mysql

加锁规则

  1. 原则1:加锁的基本单位是next-key lock。希望你还记得,next-key lock是前开后闭区间。

  2. 原则2:查找过程中访问到的对象才会加锁。

  3. 优化1:索引上的等值查询,给唯一索引加锁的时候,next-key lock退化为行锁。

  4. 优化2:索引上的等值查询,向右遍历时且最后一个值不满足等值条件的时候,next-key lock退化为间隙锁。

  5. 一个bug:唯一索引上的范围查询会访问到不满足条件的第一个值为止。

InnoDB:redo log Write-Ahead Logging:缓冲区

binlog:mysql server层

这两种日志有以下三点不同。

  1. redo log是InnoDB引擎特有的;binlog是MySQL的Server层实现的,所有引擎都可以使用。

  2. redo log是物理日志,记录的是“在某个数据页上做了什么修改”;binlog是逻辑日志,记录的是这个语句的原始逻辑,比如“给ID=2这一行的c字段加1 ”。

  3. redo log是循环写的,空间固定会用完;binlog是可以追加写入的。“追加写”是指binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

由于唯一索引用不上change buffer的优化机制,因此如果业务可以接受,从性能角度出发建议优先考虑非唯一索引

redo log 主要节省的是随机写磁盘的IO消耗(转成顺序写),而change buffer主要节省的则是随机读磁盘的IO消耗

事务

mvcc(读)

read committed

版本链

readview m_ids:[活跃事务]

https://zhuanlan.zhihu.com/p/110263562

repeatable read

锁(写)

select不加锁

select *** lock in share mode

select *** for update

repeatable read

sql不走索引,写锁锁所有;

 

逻辑架构

1、查询缓存

2、解析器

3、预处理器

4、查询优化器

5、查询执行计划

6、执行引擎(存储引擎)

类加载过程包括加载、验证、准备、解析和初始化五个阶段

链接阶段要做的是将加载到JVM中的二进制字节流的类数据信息合并到JVM的运行时状态中,经由验证、准备和解析三个阶段。

深入理解JVM,加载、链接、初始化

查询缓存

show variables like '%query_cache%';

show status like '%Qcache%';

show status like '%Com_select%';

select version();

8.0开始移除

解析器

词法解析:语句分词,解析出关键字,函数名等token

语法解析:基本语法校验,比如关键词顺序,引号是否闭合

预处理器

表和列是否存在,字段别名是否有歧义,权限校验等

查询优化器

重排关联表顺序

等价变换

子查询优化

覆盖索引扫描

提前终止

查询执行计划

EXPLAIN

SHOW WARNINGS

存储引擎

InnoDB

所有数据存储叶子节点;存储有序

logmN

聚簇索引

表记录的物理存储顺序与索引顺序一致,且索引的叶子节点就是数据节点

非聚簇索引

表记录的物理存储顺序与索引顺序无关,叶子节点包含主键值(InnoDB——主键和索引值)或指向数据块的指针(MyISAM——数据库指针)

索引创建

where join group by order by

最左匹配

经常使用、区分度大(0.1)、宽度小

type类型

const、system:单行,主键or唯一

eq_ref:第二张表主键or唯一

ref:使用key最左前缀

range:范围

index:遍历索引,全表扫描

all:全表扫描

extra

using index:索引覆盖

using where :存储引擎返回数据再过滤

using temporary:临时表

using filesort:额外排序

InnoDB一棵B+树可以存放多少行数据

2千万

存储引擎最小存储单元——页,16k

16*1024=16384B

假设主键ID为bigint,8B,指针6B,则非叶子节点,单页可以存16384/14=1170个单元,一个单元指向一个具体存储数据的叶子结点,一条数据1k,那么叶子节点可以存放16条数据。

高度为2,则可以存放1170*16=18724条

高度为3,则可以存放1170*1170*16=21902400条

mongo用的是B树

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

行格式

show variables like "%innodb_default_row_format%";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值