深入理解mysql索引底层数据结构及算法

萨瓦迪卡11个月前 (08-15)MySql1087

一、索引的本质:帮助Mysql 高效获取数据的排好序数据结构

二、索引数据结构:二叉树、红黑树、Hash表、 B-Tree

      二叉树:不适合递增的列。(链表式,查找次数多。右边比左边大)

      红黑树:本质是二叉树,二叉平衡树(比二叉树优化了点)

      Hash表(基本不用):hash算法,MD5基于此,仅能满足=,in,不支持范围查询。

      B-Tree: 

    • 叶节点具有相同的深度,叶节点的指针为空    

    • 所有索引元素不重复

    • 节点中的数据索引从左到右递增排列


三、mysql使用的索引的数据机构是: B+Tree

baf8d1bc-9669-43a9-a8d3-7aad74d4e4a8.png

 B-Tree与 B+Tree的区别:

1.非叶子节点不存储data,只存储索引(冗余),可以放更多的索引。tree结构从左到右依次递增

2.叶子节点包含所有的索引字段。

3.B+Tree叶子节点有双向指针,方便范围查找。


四.表的存储引擎索引:

MylSAMl存储引擎索引也是存到磁盘上的,一般在mysql的安装文件data里面。索引和数据是分开的,通过索引对应的磁盘文件地址,再通过磁盘文件地址找完整的数据 。

innoDB存储引擎

聚集索引:叶子节点索引下面存的是完整数据。(文件在ibd文件中)

39c61701-f3da-4766-bda2-bc197e56d48f.png


建议innoDB表要建主键,并使用整型。容易比大小,字符串还得逐个比对。

聚集索引和非聚集索引(还需要回表)那个更快?聚集更快。

如果用分库分表,用 雪花算法比较好。

五、联合索引:遵循最左前缀原则。



本文原创,转载必追究版权。

分享给朋友:

相关文章

如何彻底卸载删除oracle数据库

 windows下如何彻底删除Oracle 软件环境: 1、Windows 2000+ORACLE 8.1.7 ,oracle 10g2、ORACLE安装路径为:C:\ORACLE实现方...

java解析JSON 数组数据 实例

 public  static void main (String args[]){  String sJson ="[{'acceptTim...

使用Myeclipse 8.5开发基于JAX-WS的Web service实例

 本文为Web service 开发入门篇,主要介绍在Myeclipse 8.5环境下开发Web service的服务程序和客户端程序的基本流程。 在Weblogic 11g...

MyEclipse 10 性能大优化

MyEclipse 10 性能大优化

 MyEclipse 10已发布,新版本的特性能够大大提高开发者的效率。但同时,由于电脑配置的原因,很多开发者在使用MyEclipse的时候,速度都不是很快,需要我们对MyEclipse进行...

是谁动了我的座位

是谁动了我的座位

女孩一上火车,见自己的座位上坐着一男士。她核对自己的票,客气地说:“先生,您坐错位置了吧?” 男士拿出票嚷嚷着:“看清楚点,这是我的座,你瞎了?” 女孩仔细看了他的票,不再做声,默...

Java 实现用户资料完整度的前端显示(或根据填写资料自动评分)

前端使用 Bootstrap 的进度条组件显示百分比,后台读取权重并计算信息完整度,并将计算的结果返回给前端,供页面显示。CSS1<link href="static/sc/...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。