资讯专栏INFORMATION COLUMN

MySQL索引深入理解底层数据结构

davidac / 826人阅读

摘要:定义索引是帮助高效排好序的数据结构索引存储在文件里形式二叉树为什么用而不用二叉树如果每次的数据都是以的形式添加,会造成二叉树单边增长,从而导致查询效率依然低下红黑树会自己旋转,会有一个自平衡的过程,但是高度是不可控的如果是百万级别的数据,高

定义:索引是帮助MYSQL高效排好序的数据结构

索引存储在文件里
形式:二叉树 HASH BTREE
为什么用BTREE而不用二叉树:


如果每次的数据都是以1,2,3,4,5,6的形式添加,会造成二叉树单边增长,从而导致查询效率依然低下
红黑树会自己旋转,会有一个自平衡的过程,但是高度是不可控的,(height),如果是百万级别的数据,高度是完全不可控的

为什么用BTREE而不用HASH:HASH如果是单个查找条件会比较快,比如col=3,直接用hash(index=3)即可,但是范围查找的话效率很慢,大部分公司有很多业务都会是范围查找

如果让你来设计MySQL的BTREE,你觉得degree设为多少合适?
设为磁盘I/O一个节点的值,假如一次I/O最多取4k,就设为4k,作均衡
B+TREE的优势:非叶子节点不存储数据,只存储key

评价一个索引结构好坏的标准:磁盘I/O次数
预读:磁盘一般会顺序向后读取一定长度的数据(页的整倍数)放入内存
局部性原理:如果一个数据被用到了,那他附近的数据也马上会被用到
B+TREE的度一般会超过100,所以高度h会非常小(一般在3-5之间)
MyISAM索引实现:MyISAM索引文件和数据文件是分离的 存储引擎是表级别,不是数据库级别


D-->Data I-->index
InnoDB-->聚集索引-->数据和索引是放在一起的-->是按主键索引构建的一个BTREE树
InnoDB-->推荐使用整型自增主键-->保证数据可以顺序插入到当前索引节点的后续位置,如果是用UUID,需要比较ASCII码,还有可能插入的地方空间不足需要分裂开,花费更多的时间
不建议使用过长的字段作为主键,因为所有辅助索引都引用主索引,过长的主索引会令辅助索引变得过大
为什么非主键索引结构叶子节点存储的是主键值?(一致性和节省存储空间)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74873.html

相关文章

  • MySQL索引深入理解底层数据结构

    摘要:定义索引是帮助高效排好序的数据结构索引存储在文件里形式二叉树为什么用而不用二叉树如果每次的数据都是以的形式添加,会造成二叉树单边增长,从而导致查询效率依然低下红黑树会自己旋转,会有一个自平衡的过程,但是高度是不可控的如果是百万级别的数据,高 定义:索引是帮助MYSQL高效排好序的数据结构 索引存储在文件里形式:二叉树 HASH BTREE为什么用BTREE而不用二叉树: showIm...

    curlyCheng 评论0 收藏0
  • 深入理解Mysql索引底层数据结构与算法

    摘要:索引是帮助高效获取数据的排好序的数据结构索引数据结构对比二叉树左边子节点的数据小于父节点数据,右边子节点的数据大于父节点数据。 索引是帮助MySQL高效获取数据的排好序的数据结构 索引数据结构对比 二叉树 左边子节点的数据小于父节点数据,右边子节点的数据大于父节点数据。 如果col2是索引,查找索引为89的行元素,那么只需要查找两次,就可以获取到行元素所在的磁盘指针...

    xinhaip 评论0 收藏0
  • 如何"有计划,高效率,优简历"应对面试

    摘要:虽然有了十全的计划,但如何高效率去记住上面那么多东西是一个大问题,看看我是怎么做的。 前言 前一篇文章讲述了我在三月份毫无准备就去面试的后果,一开始心态真的爆炸,但是又不服气,一想到每次回来后家人朋友问我面试结果的期待脸,越觉得必须付出的行动来证明自己了。 面经传送门:一个1年工作经验的PHP程序员是如何被面试官虐的? 下面是我花费两个星期做的准备,主要分三部分: 有计划——计划好...

    gyl_coder 评论0 收藏0
  • MySQL使用索引优化

    摘要:理解联合索引,并能判断选择语句的执行是否使用了索引。最左原则在建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,并且底层树的排序也是先从最左边开始依次往右按照优先级进行排序。 一、概述 1.1大致目的 对Mysql存储引擎使用的索引有一个更加深入的理解。 对Mysql使用索引进行排序来优化查询有个大致了解。 理解覆盖索引和前缀索引。 理解联合...

    james 评论0 收藏0
  • 后台开发常问面试题集锦(问题搬运工,附链接)

    摘要:基础问题的的性能及原理之区别详解备忘笔记深入理解流水线抽象关键字修饰符知识点总结必看篇中的关键字解析回调机制解读抽象类与三大特征时间和时间戳的相互转换为什么要使用内部类对象锁和类锁的区别,,优缺点及比较提高篇八详解内部类单例模式和 Java基础问题 String的+的性能及原理 java之yield(),sleep(),wait()区别详解-备忘笔记 深入理解Java Stream流水...

    spacewander 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<