mySql索引

mySql索引

mySql索引

 局部性原理

 时间局部性和空间局部性

 磁盘预读(预读的长度一般为页(page)的整数倍)

  • 页是存储器的逻辑块,操作系统往往将主存和磁盘存储区分割为连续的大小相等的块
  • 每个存储块称为一页(在血多操作系统中,页大小通常为4k)
  • 主存和磁盘以页为单位交换数据

索引

mySql索引

mySql索引

mySql索引

 扰动函数

 mySql索引

 红黑树不是严格的平衡树,是对AVL树的升级

mySql索引

 mySql索引

 B树

mySql索引  mySql索引

mySql索引

  B+树

mySql索引

 mySql索引

mySql索引

  InnoDB--B+Tree,叶子结点直接放置数据

  回表

mySql索引

 mysql MyISAM -- B+Tree

mySql索引

聚簇索引,索引文件和数据文件放在一起

非聚簇索引,索引文件和数据文件分开放

  • InnoDB使用聚集索引,数据根据主索引存储在叶子节点上,辅助索引的data域存储主键
  • myisam使用非聚集索引,即主索引(B+树)的叶子节点存储数据的地址,myisam可以没有主键,数据也不是存储在B+主索引的叶子节点上的

 回表

mySql索引

 索引分类

mySql索引

  • 唯一索引,不需要回表操作
  • 普通索引,回表的时候可以通过覆盖索引优化

 覆盖索引,选择id的时候,先查nameB+树,这棵树带着id,所以不需要回表

mySql索引

 全文索引,myisam支持,mysql5.6之后的innodb开始支持

 倒排索引,

 组合索引,索引最左匹配原则(最左前缀)

 选择合适的应用场景建立合适的索引,选择占用更小空间的索引

 explain 来查询计划

mySql索引

 索引下推

 mySql索引

 回表之前就已经把数据进行了一次筛选

 MySQL存储引擎

 mySql索引

 索引维护

mySql索引

mySql索引

查询缓存

mysql8.0之后,没有查询缓存了

AST抽象语法树

mySql索引

查询缓存

mySql索引

mySql索引

mySql索引

日志

服务端日志,binlog

存储引擎端日志

innodb,redolog,用于前滚

mySql索引

wal,write ahead log

mySql索引

log buffer,属于用户空间

undo log,用于回滚

mySql索引

 binlog-服务端日志

redo是innodb独有,binlog所有引擎通用

redo是物理日志,记录某个数据页做了什么修改;binlog是逻辑日志,记录语句原始逻辑

mySql索引

mySql索引

mySql索引

mySql索引

Redo log 两阶段提交

mySql索引