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

2019-12-10 13:08:37 +08:00
 wml

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

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

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

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

45 讲我也买了,但是不如掘金那个讲的细致,小细节我就去翻掘金那个了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/627585

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX