B树和B+树
B树 排好序的 节点内部有多个元素
B+树 排好序的 节点内多个元素 叶子节点有指针(双向指针) 非叶子节点冗余了一份在叶子节点
mysql定义B+树 InnoDB
B+树是B树的升级版~
InnoDB b+树是怎么产生的
mysql 页 目录 16KB
自增id uuid
一页最多可以存储16kb个数据
上面的就是B+树
B+树一般两层,最多三层,可以存四千多万行数据(int类型)
图中的4b为int占的字节数,6b为指针占的字节数 一页最多1638个数据 一行数据大概为1kb
上面的是索引页,下面的是数据页
索引页和数据页是存在一起的,所以叫聚集索引(聚簇索引)
InnoDB主键索引就是聚集索引
联合索引
(黄色的字段存的是主键值)
通过主键再去主键索引那查找数据的过程就叫回表~(InnoDB里面的回表)
最左前缀原则
假如联合索引是bcd sql语句给了bd这两个查询条件 mysql5.几之后可以在联合索引表中过滤d的条件,因而不用回表查询两次~
【主键索引通常采用 B 树或 B + 树等数据结构来实现。这些数据结构可以快速地定位到特定的主键值,并找到对应的行数据。全表扫描没有利用任何索引结构,而是直接从表的第一个数据页开始,依次读取每一行数据,并检查是否符合查询条件。】
条件不够精确时,索引查询没有全表扫描快,就会全表扫描
查询主要包括走索引查询和全表扫描两种方式实现(全表扫描不用回表)
【当数据库执行查询操作时,如果查询所需要的所有列的数据都可以从索引中直接获取,而不需要再去查询数据表中的数据行,那么这个索引就被称为覆盖索引。】
orderby如果需要回表就可能会导致索引失效
mysql只要对字段执行了什么操作,就会导致走不了什么索引,索引失效!
mysql锁
mysql慢查询如何优化
聚簇索引和非聚簇索引的区别
如何实现分库分表
分区键
尽量不要做分库分表
存储拆分后如何解决唯一主键
通过数据库主键,不同的表不同的起始值和步长
美团双butter和多butter?
MySQL事务的四大特性——ACID
ACID靠什么保证的?
binlog和relog的一致
undo log redo log
什么是MVCC?
MySQL主从同步原理
事务的具体特性和隔离级别
可重复读,如果两次读取不一致,以前面结果为准。
readview只支持查询操作