mySql索引

 局部性原理#

 时间局部性和空间局部性

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

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

索引#

 

 

 

 扰动函数#

 

 

 

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

 

 

 

 

 

 B树#

 

 

 

  B+树 #

 

 

 

 

 

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

  回表#

 

 mysql MyISAM -- B+Tree#

 

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

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

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

 回表#

 

 

 索引分类 #

 

 

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

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

 

 

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

 倒排索引,

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

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

 explain 来查询计划

 

 

 索引下推#

 

 

 

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

 MySQL存储引擎#

 

 

 

 索引维护#

 

 

 

 

查询缓存#

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

AST抽象语法树#

 

 

查询缓存#

 

 

 

 

 

 

日志#

服务端日志,binlog#

存储引擎端日志#

innodb,redolog,用于前滚#

 

 

wal,write ahead log#

 

 

log buffer,属于用户空间

undo log,用于回滚#

 

 

 binlog-服务端日志#

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

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

 

 

 

 

Redo log 两阶段提交#

posted @   BigBender  阅读(60)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2020-01-02 一元函数微分学几何应用(三)-- 渐近线
2020-01-02 一元函数微分学几何应用(二)-- 凹凸性与拐点
2020-01-02 一元函数微分学几何应用(一)-- 单调性与极值
点击右上角即可分享
微信分享提示
主题色彩