Mysql索引存储模型推演
一:二叉查找树
特点:左子树的所有的节点都小于父节点,右子树的所有节点都大于父节点,就是一个有序的线性表(从下往上看 2 6 11 13 17 22) 图1

二叉查找树,既能实现快速查找,又能实现快速插入
缺点:但是二叉查找树有个缺点,就是他的查找速度和这棵树的深度有关系,在最坏的情况下,会退化到0(n);

什么是最坏的情况呢?如果我们刚才插入的顺序,刚好是 2 6 11 13 17 22
;那么如图所示,它会变成链表,变成顺序查找了! 如图2

二.平衡二叉树
特点:左右子树深度差,绝对值不超过1;什么意思呢?比如左子树的深度是2,那么右子树的深度只能是1或者3

那么我们在按照2 6 11 13 17 22 插入,如图3

那么他是如何实现平衡的呢?咱们开始分析

第一步:举个例子 ;
如图4所示,插入7,会导致左右子树绝对值差超过1,

那么我们从7 往上找,找到不平衡的最小子树 那么我们找到是4 6 8 ;然后我们将整颗树中序遍历,排序是

6变成根节点 4变成6的左节点,8变成6的右节点,剩余的照抄,平衡后的树如下图所示

平衡的问题解决了,平衡二叉树作为索引,怎么查找数据呢?
在平衡二叉树中,一个节点是大小固定的单位,作为索引,该怎么存储数据呢?
1:存储建立索引字段的值,叫做减值,比如id值
2:还要保存完整记录在磁盘上的地址
3:由于AVL是二叉树,还要保存左右节点的指针
如图所示

当我们我们用树的结构存储索引的时候,每访问一个节点,就要和磁盘发生一次io操作,innodb操作磁盘的最小的单位是一页,大小是16k。

那么一个树的节点,必须设计成16k的大小,不然就会出现读不完或者读不够的事情

怎么解决这个问题?
第一:就是让每个节点存储16k的数据
第二:节点上的关键字的数量越多,也就意味着有更多的分叉
这个就是我们要引入的多路平和二叉树

3.B Tree

查找规则是什么?比如这张表,我们要查找15,因为15小于7,走左边,因为15大于12,走右边,在磁盘快7里面,我们只找了3次,这是不是比Avl效率高些

B tree是如何实现一个节点,保存很多数据,并保持平衡的?

比如一个节点,最大路数是3,那么当我们插入1 2 3,当我们插入3的时候,本来应该在第一个磁盘快,但是如果一个节点有3个关键字的时候,意味着有4个指针,子节点会变成4路,这个时候必须进行分裂,把2提上去,把1和3变成2的子节点;
如果删除节点,会有相反的合并操作

4:一张innodb表可能有很多索引,数据是肯定只有一份的,那数据是在哪个索引的叶子节点上呢?

这里给大家介绍一个聚集索引;就是索引的减值逻辑顺序和表数据行的逻辑存储顺序是一致的。

问题来了?主键索引之外的索引是不是也存储一份完整的数据?
答案是否定的,因为这样会带来额外的存储空间和计算消耗。
他们的叶子节点没有完整数据,怎么检索数据呢?
比如我们在name字段上建立的普通索引,当我们检索name=myl,的时候,二级索引存储的是这条记录对应的主键值 比如 myl id=1;

4:索引的使用原则

是不是建立索引越多越好呢?肯定不是,索引也会带来一定的开销
1:建议在离散度高的字段上建立索引
2:如果b+tree里面重复值太多,mysql优化器发现走索引和全表扫描差不多,不一定会走索引
3:联合索引最左匹配:
比如我们在user表的name和phone字段上建立联合索引
联合索引在B+tree上是最复杂的结构,它是按照从左到右的顺序来建立搜索树的,name在左边,phone在右边

什么时候用到联合索引?所以当我们创建联合索引的时候,最常用的列放在最左边

5:索引条件下推:只适用于二级索引,目标是减少访问表的完整行的读数量,从而减少io操作,这里说的下推是意思是过滤的动作在存储引擎做完,而不需要在server层做。

6:索引的创建和使用

用到索引:
6.1:在用于where判断order排序和join的on,group by 字段上面建立索引
6.2: 索引的个数不要过多
6.3:离散度低的不要建立索引,比如姓名
6.4: 频繁更新的值 不建议作为索引
6.5: 随机无序的值,不建议作为索引
6.6: 组合索引,把离散度高的放到前面
6.7

用不到索引:
6.8索引列使用函数
6.9 like前面加%
6.91 not like不可以,!=和 not in在某些情况下可以

mysql-索引分析相关推荐

  1. MySQL索引分析和优化(转)

    MySQL索引分析和优化(转) 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记 录,直至找到符 ...

  2. MySQL 索引分析除了 EXPLAIN 还有什么方法?

    作者 | adrninistrat0r 责编 | 夕颜 出品 | CSDN(ID:CSDNnews) 前言 对于非数据库开发人员而言,难以对MySQL源码进行分析或调试,接近一个黑盒,但MySQL提供 ...

  3. php mysql索引原理_加速PHP动态网站 关于MySQL索引分析优化

    本文主要讲述了如何加速动态网站的MySQL索引分析和优化. 一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第 ...

  4. MySQL索引分析扩展理解

    MySQL索引分析扩展理解 看了很多网上的一些资料,感觉MySQL的索引知识还是很多的,这一篇文章就用来自己对MySQL索引的其他理解和以前模糊的地方的一些总结. 1.MySQL的常见索引模型 有序数 ...

  5. mysql索引分析_MySQL索引分析和优化

    什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面 ...

  6. mysql索引分析和优化_MySQL索引分析和优化

    什么是索引? 索 引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的 所有记录,直至找到符合要求的记录.表 ...

  7. MySQL索引分析以及相关面试题

    可以在我的个人博客阅读文章,排版会美观一些:文章地址 1. 什么是索引 一种能帮助mysql提高查询效率的数据结构:索引数据结构 索引优点: 大大提高数据查询速度 索引缺点: 维护索引需要耗费数据库资 ...

  8. mysql 索引分析工具_Mysql:性能分析以及Explain工具的使用

    ---恢复内容开始--- 1.介绍 Explain工具是用来分析sql语句性能的工具,他会显示出Mysql内部解析语句的状况 使用方法: explain+sql语句 例如 2.字段分析 一.ID字段 ...

  9. MySql索引分析及查询优化

    B-Tree 核心特点: 多路,非二叉树 每个节点既保存索引,又保存数据 搜索时相当于二分查找 B+Tree 核心特点 多路非二叉 只有叶子节点保存数据 搜索时相当于二分查找 增加了相邻接点的指向指针 ...

  10. MySQL索引 专题

    什么是索引 索引是存储引擎用于快速找到记录的一种数据结构,索引类似一本书的目录,我们可以快速的根据目录查找到我们想要的内容的所在页码,索引的优化应该是对查询性能优化最有效的手段了. 因此,首先你要明白 ...

最新文章

  1. java clob 释放_在Java中处理CLOB字段
  2. 软件开发环境-环境信息库
  3. 淘金尖端领域:全球量子技术最新投资趋势
  4. 解决SecureCRT中文显示乱码
  5. Nature年度十大杰出论文公布:机器狗算法、近室温超导等入选,复旦中科院上榜...
  6. Android应用小工具(窗口小部件)
  7. python列表迭代器_关于Python中迭代器的作用
  8. 语言求圆周率近似值改错_新证明解决了如何求无理数的近似值
  9. Multi-Architecture镜像制作指南已到,请查收!
  10. 基于人人网的简单爬虫(二)——具体实现
  11. Linux修改挂载目录名称
  12. 第二十:如何把Jenkins+Allure2生成的报告发送邮件(重点超详细)
  13. Qt捕捉窗口关闭事件
  14. .Net Micro Framework研究—带I2C总线的模拟器
  15. 鸿蒙与Android API对应关系
  16. Vultr centost7一键安装BBR工具教程
  17. 应用MATLAB求解线性代数题目(三)——n维向量
  18. java多线程:9、synchronized、Lock的底层实现原理以及和volatile、Lock、ReentrantLock的区别?
  19. 数据结构与算法05----图
  20. 【摘】Linux运维入门到高级全套常用要点

热门文章

  1. 在python中、int表示的数据类型是_python--002--数据类型(int、str)
  2. Android自定义View之仿QQ运动步数进度效果
  3. 教师心理压力测试软件,关注教师心理健康——教师版心理测评软件
  4. Typora+PicGo-core+SMMS图床踩坑记
  5. wps不能打印_除了office/wps,还有一些好用的办公软件推荐给你
  6. 还在为美容护肤问题焦虑吗?不妨试试红光光浴#大健康#红光光浴#红光#种光光学
  7. Android home和back事件处理
  8. 一位计算机牛人的心得,谈到计算机和数学,很实用~
  9. 「数据科学」数据科学家为什么该学习PostgreSQL
  10. PHPCMS模块分析之广告模块详解----北冥神功破解法(一)