V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
wml
V2EX  ›  MySQL

MySql InnoDB 索引叶子节点记录的是什么?

  •  
  •   wml · 2019-12-10 13:08:37 +08:00 · 6537 次点击
    这是一个创建于 1839 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在网上看到有的说聚集索引中叶子节点记录的是这一行纪录的数据,有的说是纪录位置。那到底纪录的啥,没搞明白。 还有普通索引叶子节点是纪录主键?这个应该不是位置吧。

    13 条回复    2019-12-11 10:24:02 +08:00
    wangyzj
        1
    wangyzj  
       2019-12-10 13:10:36 +08:00
    主键索引是记录
    其他索引是位置
    alpha2016
        2
    alpha2016  
       2019-12-10 13:13:28 +08:00
    主键上是整条数据,其他索引上是主键的 ID,然后回表查询数据,是时候推荐你买课了 https://segmentfault.com/a/1190000018416259
    wml
        3
    wml  
    OP
       2019-12-10 13:35:54 +08:00
    @wangyzj
    @alpha2016
    谢谢回复。

    那表记录和主键索引叶子节点的纪录,是相当于存储了两份吗?
    johnj
        4
    johnj  
       2019-12-10 13:53:09 +08:00
    @wml 就一份数据 在主键索引的叶子上
    wml
        5
    wml  
    OP
       2019-12-10 13:58:51 +08:00
    @johnj 明白了 感谢
    liunaijie
        6
    liunaijie  
       2019-12-10 14:10:02 +08:00
    @johnj 如果在建表时没有创建主键,在后面修改表结构添加主键。这种情况下是怎么操作的呢?
    johnj
        7
    johnj  
       2019-12-10 14:18:39 +08:00
    @liunaijie 你不设置主键 innodb 引擎也会给你搞主键的 只是你看不见。你自己再加主键的话,我不清楚这个过程,是否是新主键重建整个表。一般没这么干的,都是要给主键且是自增主键。
    alpha2016
        8
    alpha2016  
       2019-12-10 14:26:43 +08:00
    @liunaijie 如果没有指定主键,系统会使用 row_id 来当主键,这个对数据是不可见,row_id 全局共享,之后在新增主键的话,估计会进行一次数据搬迁一样的操作,将记录搬到新的主键一份,原来的删不删不知道了,估计在 OPTIMIZE TABLE 的时候会触发删除原来的。

    这个在掘金那个 mysql 小册里讲的很详细,用我二楼的连接买吧
    wangyzj
        9
    wangyzj  
       2019-12-10 14:50:56 +08:00
    @alpha2016 .......
    dreamm
        10
    dreamm  
       2019-12-10 15:07:09 +08:00
    @alpha2016 哈哈哈我感觉你是来打广告的
    alpha2016
        11
    alpha2016  
       2019-12-10 15:11:35 +08:00
    @dreamm 顺带 ad 一下,不好的话好像没办法删掉了
    liunaijie
        12
    liunaijie  
       2019-12-11 09:52:17 +08:00
    @alpha2016 之前买了 MySQL45 讲。以为存储了两份记录,才有了这个问题。
    alpha2016
        13
    alpha2016  
       2019-12-11 10:24:01 +08:00
    @liunaijie 昨天请假一个大佬,他让我测试一下,然后观察 ibd 文件的变化,就一目了然了。大佬原话:页面结构和记录结构有讲每个字节都是干嘛的,授人以鱼不如授人以渔,自己对照着分析吧,万能解法。

    45 讲我也买了,但是不如掘金那个讲的细致,小细节我就去翻掘金那个了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   970 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:54 · PVG 06:54 · LAX 14:54 · JFK 17:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.