首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL InnoDB =>复合PK和二级指数

问MySQL InnoDB =>复合PK和二级指数
EN

Stack Overflow用户
提问于 2014-11-21 16:25:04
回答 2查看 194关注 0票数 2

我知道PK是InnoDB中每个二级索引的一部分,但是这种情况如何:

我有两列的表结构

a,b

我选择PK作为a+b

并在b上创建索引。

问题是,二级指数的结构如何?

它是储存在

b a

或

b a+b

或者另一个更详细的例子:

桌:街道,城市,州,拉链,fk_customers

PK: fk_customers + street + city + zip

指数(城市)

索引(街道)

次要索引是否存储如下:

city    fk_customers + street + zip

street    fk_customers + city + zip

或者像这样:

city    fk_customers + street + city + zip

street    fk_customers + street + city + zip

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-21 18:40:43

这很容易证实。我的直觉告诉我,b的第二个关键是b a b,但是InnoDB足够聪明,可以省略冗余的b。

代码语言:javascript
复制
mysql> create table t1 (a varchar(32), b varchar(32), primary key (a,b));
mysql> alter table add index(b);
mysql> insert into t1 values('aaa','bbb');
Query OK, 1 row affected (0.00 sec)

下面是辅助索引页的十六进制:

代码语言:javascript
复制
00004000  07 11 7d 29 00 00 00 04  ff ff ff ff ff ff ff ff  |..})............|
00004010  00 00 00 00 ff ee cf d5  45 bf 00 00 00 00 00 00  |........E.......|
00004020  00 00 00 00 09 31 00 02  00 85 80 03 00 00 00 00  |.....1..........|
00004030  00 7f 00 05 00 00 00 01  00 00 00 00 00 01 e0 7e  |...............~|
00004040  00 00 00 00 00 00 00 00  18 1a 00 00 09 31 00 00  |.............1..|
00004050  00 02 02 72 00 00 09 31  00 00 00 02 01 b2 01 00  |...r...1........|
00004060  02 00 1c 69 6e 66 69 6d  75 6d 00 02 00 0b 00 00  |...infimum......|
00004070  73 75 70 72 65 6d 75 6d  03 03 00 00 10 ff f1 62  |supremum.......b|
00004080  62 62 61 61 61 00 00 00  00 00 00 00 00 00 00 00  |bbaaa...........|
00004090  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

正如您所看到的,列a紧跟在键列b之后。没有尾随的b

票数 4
EN

Stack Overflow用户

发布于 2014-11-29 17:48:11

akuzminsky上面的答案是正确的,但是要增加一些讨论:这实际上在我的博客文章"InnoDB中记录的物理结构“标题”次要索引“下讨论过:

例如,如果表有主键(a,b,c)和辅助索引键(a,d),则索引中的辅助键将如预期的那样(a,d),但PKV只包含(b,c)。

您还可以通过创建一个表,并使用page-dump或record-dump模式以及--trace来查看读取记录时遇到的实际字节,从而确认这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27065910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档