5_数据库(五)_MySql索引

1、索引的定义:索引是帮助MySql高效获取数据的 排序好数据结构
2、索引存储在文件里 
3、索引结构 
  • 二叉树 
  • 红黑树 
  • HASH
  • BTREE
图解本质
  • 红黑树(Red Black Tree) 是一种 自平衡二叉查找树 ,是在 计算机 科学中用到的一种 数据结构 ,典型的用途是实现 关联数组
红黑树和 平衡二叉树 区别如下:
  • 1、红黑树 放弃了追求完全平衡,追求大致平衡 在与 平衡二叉树 时间复杂度 相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单。
  • 2、 平衡二叉树 追求绝对平衡,条件比较苛刻,实现起来比较麻烦,每次插入新节点之后需要旋转的次数不能预知。
 
4、B-Tree(B减树也叫B树)
  • 度-节点的数据存储个数
  • 叶节点具有相同的深度 
  • 叶结点指针为空
  • 节点中的数据key从左到右递增排列
5、B+Tree(B-Tree的变种)
  • 非叶子节点不存储data,只存储key, 可以增大度
  • 叶子节点不存储指针
  • 顺序访问指针,提高区间访问呢的性能。
 
好处:
  • 因为索引加载到内存中,通过在内存中查找对应索引更快。
  • 每一个节点可以存储1170个元素,这样能减小树的深度的遍历。
 
 
6、InnoDB等数据库引擎是针对 的,不是针对数据库的。
7、 MyISAM索引底层数据结构与算法
 
  • frm创建表的框架文件。
  • MYD表数据文件
  • MYI表索引文件(磁盘上的)
 
8、InnoDB索引实现( 聚集【 聚集:表数据文件和表索引文件在一起、 非聚集:表数据文件和表索引文件不在一起】)
  • 表数据文件本身就是按照B+Tree组织的一个索引结构
  • 聚集索引-叶子节点包含了完整了数据记录
 
左:InnoDB引擎
  • 为什么InnoDB表必须有主键 ,并且推荐使用整型自增长?
    • 因为InnoDB是通过主键进行 索引,如果没有会为其创建一个。
    • 相对于uuid(字符串),字符串比较需要转换成ASCII码,比较要比整形耗时,而且字符串所占内存空间大。
    • 因为B+树在节点中间插入会导致 分裂,如果直接使用主键自增,则避免分裂耗时。
  • B+树叶子节点的指针有什么用?
    • 分裂时用来连接两个节点
    • 相对于Hash方式存储,如果是范围内查找(>\<),HASH并不适用。
    • 而B+树自带指针,如果查找大于,直接在其节点指针右边即可 。
  • 为什么非主键索引结构叶子节点存储的是主键值?(一致性和节省 存储空间)
    • 因为InnoDB是通过主键进行 索引,如果没有会为其创建一个。
    • 相对于uuid(字符串),字符串比较需要转换成ASCII码,比较要比整形耗时,而且字符串所占内存空间大
 
 
 
 
 
 
 
 
 
原创文章 63 获赞 48 访问量 8万+

猜你喜欢

转载自blog.csdn.net/csp_6666/article/details/103473095