• 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

  • 相关阅读:
    linux centos 安装配置rsync
    linux下mysql权限配置
    让nginx支持patchinfo,(支持codeigniter,thinkphp,ZF等框架)
    nginx、php-fpm安装mongodb及驱动扩展
    redis和redis php扩展安装
    sea.js 入门
    require.js 入门笔记
    怎么玩耍图标字体.
    利用 Gulp 处理前端工作流程
    LESS 学习记录(简单入门)
  • 原文地址:https://www.cnblogs.com/wanghq1994/p/12134329.html
Copyright © 2020-2023  润新知