mysql-spark

本文详细介绍了MySQL的存储引擎结构、索引原理,特别是B+树如何优化磁盘IO。讨论了不同场景下索引的选择、优化及查询优化策略,包括全表扫描、联合索引、覆盖索引等概念,并提到了InnoDB与MyISAM的区别。
摘要由CSDN通过智能技术生成

mysql  存储引擎的单位是以表划分的(不同的表,可以不同的存储引擎)
有二层:Server层、存储引擎层。
索引就是按用户任意指定的字段对数据进行排序的一种数据结构。
局部性原理:操作系统执行指令a,会取一页的数据(操作系统默认4kb,但是innodb自己默认的是16kb,一页也就是一个节点,既是一个节点是16kb),去硬盘取(既是磁盘io),产生磁盘io哪怕你的指令小于4kb,也是这样的。下一个指令b。再执行时
会直接去内存中找,因为a指令已经取出来了。这样就减少了磁盘io次数。
16kb,三层树差不多存储二千多万个索引
SHOW GLOBAL STATUS LIKE 'INNODB_page_size';

计算机组成原理里面说明了,一次磁盘io与内存交互,最多4kb数据(跟mysql没关系,计算机规定的)

以页为单位存储(无论是数据还是索引),叶子结点是双向链表(章节我不确定,貌似也是的)。每个单元都是类似一章一章,每一章里面就是各个页码(相当于第一章是存1-10的页码(也额外有这些页码的类似于数据或者索引最大值最小值,这样比如你拿个字段值,就能更好的确定
是哪一章,然后章中页码上也会存自己页中索引最大最小值,你又知道了是哪一页,页中可能会分租,组索引表中也会存自己组所有行的最大最小,然后再确定是哪一组,直至找到那行数据),第二章存11-20的页码,到时候先根据范围找到第
几章,再找第几页),章节相当于几个页集合的目录  例如var a=1  1_111a  1就是章数,11页码


插入的时候,索引会要排序,影响插入的效率。既是插入的顺序,不代表存储顺序。

建立索引,就是字段排序

有数据页,也有索引页(章节目录,可以是数组,连续的)。一旦索引页过多,既是页数越来越多,索引页也可以变成数据页,
再提取其索引,生成高一级索引页。(相当于一级标题,二级标题,三级标题,内容..,层级结构)。这样就是为什么要用
b+树数据索引的原因

b+树,叶子节点既保留了用户数据,也保留了上级非叶子节点的数据,既是冗余存储。以空间换时间(B+树的父节点也必须存在于子节点中,是其中最大或者最小元素,这样范围查找就能找到下一个节点的指针了)
这样的存储的好处是,比如找a>2的,找到a=2的那个,它后面的就全部都是>2的,因为是按排序后的顺序存储的

b+树和avl树(完全平衡树,既是最多2个叶子)不一样,b+树,叶子节点之间也有联系(存储上下临近叶子节点的指针,以空间换时间,双向链表),avl树是没有的。b+树,可以
有多个节点(超过2个的)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值