理解:数据库索引&数据结构

理解,为什么选择B+Tree做数据库的索引

  1. 二分查找法
    有序数组中查找某一特定元素,折半查找。O(logn)


    很明显,对于无序的数据建立索引并不适合。

  2. Binary Search Tree 二叉查找树


    二叉查找树的时间复杂度为O(log n),但是最坏情况下是O(n),不平衡。

    二叉查找树不适合作为索引的原因:

    • IO不好:平衡问题,节点数据少深度高;(AVL树,红黑树)
    • 范围查找不好;
  3. B-Tree B树


    B树解决的问题:IO (平衡 + 节点数据多深度小)
    B树没有解决的问题:范围查找

  4. B+Tree


    B+Tree是B-Tree的变种。
    1)节点可以存放更多的key(数据地址只放在叶子节点上)
    2)叶子节点双向相连接,方便范围查找。

  5. B+Tree索引区别
    MySQL不同的存储引擎的B+Tree索引也不太一样。
    MyISAM:叶子节点存放数据的地址; 索引和数据分离


    InnoDB:叶子节点存放实际的数据;
    InnoDB默认按照主键的顺序来存放记录,辅助索引的叶子节点数据是相应的主键;


    聚集索引:索引中键值的逻辑顺序决定了表中相应行的物理顺序。 (叶子节点存数据)
    非聚集索引:索引的逻辑顺序与磁盘上行的物理存储顺序不同。 (叶子节点存地址)

  6. 备注
    码农翻身学习,B+树定义好像不太一样,重在理解选择过程。


@梦工厂 2018.3.14

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容