searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

MySQL联合索引的数据结构

2024-11-08 09:21:15
1
0

联合索引是在多个列上创建的一个索引,当查询设计多个列时,联合索引可以显著提升查询性能,减少单独索引的数量,节省存储空间,是我们最常使用的性能优化手段之一。

创建联合索引的语句如下:

CREATE INDEX idx_name ON table_name (column1, column2, column3);

那么在联合索引的背后,它在InnoDB中是怎样存储的呢?

联合索引归根结底还是一颗B+树,它与普通单索引的区别在于:

普通单索引的非叶子节点包含的是一个列,而联合索引的非叶子节点包含的是多个列。

id b c d e
1 13 12 4 sdgklh
2 1 5 4 akljdhf
3 13 16 5 gfddf
4 12 14 3 xkjhfds
5 1 1 4 urhgd
6 13 16 1 sfndg
7 5 3 6 ihjdsf

例如有张表T1,自增主键为id,然后在b、c、d列上建了一个联合索引idx_bcd(b,c,d)

图中一个联合索引节点就是b、c、d三个字段的合集,按照建立索引的先后顺序,横着看,根节点图块中第一行都是b列,第二行都是c列,第三行都是d列。

首先,根节点按照b列对节点进行排序,如果b列相等,再按照c列排序,c列相等,再按d列排序,以此类推。

然后中间的内部节点也是类似的,最终最底层存储着叶子节点,每个叶子节点之间通过指针相连,形成一个双向链表。

0条评论
0 / 1000
胡****亮
4文章数
0粉丝数
胡****亮
4 文章 | 0 粉丝
胡****亮
4文章数
0粉丝数
胡****亮
4 文章 | 0 粉丝
原创

MySQL联合索引的数据结构

2024-11-08 09:21:15
1
0

联合索引是在多个列上创建的一个索引,当查询设计多个列时,联合索引可以显著提升查询性能,减少单独索引的数量,节省存储空间,是我们最常使用的性能优化手段之一。

创建联合索引的语句如下:

CREATE INDEX idx_name ON table_name (column1, column2, column3);

那么在联合索引的背后,它在InnoDB中是怎样存储的呢?

联合索引归根结底还是一颗B+树,它与普通单索引的区别在于:

普通单索引的非叶子节点包含的是一个列,而联合索引的非叶子节点包含的是多个列。

id b c d e
1 13 12 4 sdgklh
2 1 5 4 akljdhf
3 13 16 5 gfddf
4 12 14 3 xkjhfds
5 1 1 4 urhgd
6 13 16 1 sfndg
7 5 3 6 ihjdsf

例如有张表T1,自增主键为id,然后在b、c、d列上建了一个联合索引idx_bcd(b,c,d)

图中一个联合索引节点就是b、c、d三个字段的合集,按照建立索引的先后顺序,横着看,根节点图块中第一行都是b列,第二行都是c列,第三行都是d列。

首先,根节点按照b列对节点进行排序,如果b列相等,再按照c列排序,c列相等,再按d列排序,以此类推。

然后中间的内部节点也是类似的,最终最底层存储着叶子节点,每个叶子节点之间通过指针相连,形成一个双向链表。

文章来自个人专栏
数据库的那些事
4 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0