• mysql索引数据结构


    mysql索引数据结构选择的是B+树。以下列出可选用的数据结构,和他们所存在的一些缺点。

    二叉树(如果是线性增长的数据,则二叉树会一直增加深度)
    红黑树 (虽然红黑树解决了线性增长的数据问题,但是对于百万数据来说,树的深度还是太深)
    hash表(hash算法这种适用于查询单条数据,根据key-value方式,但是不适用于范围查询)

    B树

    每个节点都存储key和data,所有节点组成这棵树,并且叶子节点指针为null。

     B+树

    只有叶子节点存储data,叶子节点包含了这棵树的所有键值,叶子节点不存储指针。

     后来,在B+树上增加了顺序访问指针,也就是每个叶子节点增加一个指向相邻叶子节点的指针,这样一棵树成了数据库系统实现索引的首选数据结构。

    一般来说,索引很大,往往以索引文件的形式存储的磁盘上,索引查找时产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,所以评价一个数据结构作为索引的优劣最重要的指标就是在查找过程中磁盘I/O操作次数的时间复杂度。树高度越小,I/O次数越少。

    那为什么mysql索引数据结构选择的是B+树而不是B树呢,因为它内节点不存储data,这样一个节点就可以存储更多的key。



    在MySQL中,最常用的两个存储引擎是MyISAM和InnoDB,它们对索引的实现方式是不同的。

    MyISAM

    data存的是数据地址。索引是索引,数据是数据。索引放在XX.MYI文件中,数据放在XX.MYD文件中,所以也叫非聚集索引。

    InnoDB

    data存的是数据本身。索引也是数据。数据和索引存在一个XX.IDB文件中,所以也叫聚集索引。

    引用:https://blog.csdn.net/zhuanzhe117/article/details/78039692

  • 相关阅读:
    迅为龙芯2K1000开发板虚拟机ubuntu安装软件
    迅为恩智浦IMX6Q开发板系统固件TF卡烧写
    瑞芯微迅为iTOP-3399开发板资料更新啦!最新版本为1.3版本
    迅为-龙芯2K1000开发板虚拟机ubuntu系统开关机
    迅为IMX6ULL开发板Linux驱动初探-最简单的设备驱动-helloworld
    迅为-龙芯2K1000开发板虚拟机ubuntu基础操作
    开始Blog
    16 bit 的灰度图如何显示
    GPU 总结
    同步,异步,多线程和事件总结
  • 原文地址:https://www.cnblogs.com/wanghq1994/p/12134329.html
Copyright © 2020-2023  润新知