V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zxc1234
V2EX  ›  程序员

关于 B+tree 索引的疑问

  •  
  •   zxc1234 · 2020-03-28 19:34:26 +08:00 · 2294 次点击
    这是一个创建于 1700 天前的主题,其中的信息可能已经有所发展或是发生改变。

    关于 B+tree 的疑问

    mysql 中 innodb 引擎索引使用 B+tree

    我看网上资料说 ===:

    ( B+ 树中的节点不存储数据,只是索引,而 B 树中的节点存储数据)

    可是 innodb 的主键索引的叶子节点就是数据啊

    请问 是哪里不对吗

    10 条回复    2020-03-29 20:23:45 +08:00
    Stevenv
        1
    Stevenv  
       2020-03-28 19:47:29 +08:00
    分内部节点,叶子节点。B+Tree:内部节点不存值,子节点存值。B-Tree:内部节点、子节点都存值
    holosola
        2
    holosola  
       2020-03-28 19:47:57 +08:00
    你这么理解吧,B+ 树数据只存储在叶子节点,B 树每个节点都存储了数据。
    gosansam
        3
    gosansam  
       2020-03-28 21:23:48 +08:00
    主键列的索引 叶子结点存储完整的数据,非主键索引在叶子节点存储索引列+主键等,增加一次主键索引查询(高效果),避免浪费空间
    hhyvs111
        4
    hhyvs111  
       2020-03-28 23:06:13 +08:00
    网上资料是错的
    SmartKeyerror
        5
    SmartKeyerror  
       2020-03-29 11:07:38 +08:00
    在网上遇到自己不确定知识点的时候,最简单且有效的办法就是自己动手验证。MySQL InnoDB 存储引擎实际存储就 3 个文件: .opt, .frm, .ibd ,其中.ibd 为实际存储数据和索引的地方,聚簇索引和辅助索引数据均在该文件中。建一张测试表,写点儿数据,然后闷头分析.ibd 文件就行了。
    当初我对这东西也很有疑问,动手分析了之后明白了个大概。https://smartkeyerror.com/MySQL-physical-structure,后面自己写了篇博客,希望对你有帮助。
    PS: 推荐《 MySQL 技术内幕-InnoDB 存储引擎》,相信能解答你许多疑惑。
    LudwigWS
        6
    LudwigWS  
       2020-03-29 12:43:55 +08:00
    @SmartKeyerror 向大佬学习
    SmartKeyerror
        7
    SmartKeyerror  
       2020-03-29 14:40:44 +08:00
    @LudwigWS 不是大佬,无名小卒而已..
    scriptB0y
        9
    scriptB0y  
       2020-03-29 18:29:32 +08:00
    @andj4cn 微信的图无法显示。
    zxc1234
        10
    zxc1234  
    OP
       2020-03-29 20:23:45 +08:00
    @andj4cn 请问 b 树的图呢 有吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2789 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:55 · PVG 21:55 · LAX 05:55 · JFK 08:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.