Mysql InnoDB下联合索引的索引数量?

假如有三个字段a,b,c,数据库记录有100万,那如果建a,b,c的联合索引,那这个联合索引的数量就应该是100万*100万*100万么,会不会也太大了,是不是说明联合索引的效率一般?

阅读 3.8k
2 个回答

InnoDB每组索引是一颗B+树,分为叶子节点和非叶子节点:非叶子节点只会存储索引列和指向下级节点的指针,而叶子节点存储的是真实数据页。

  • 主键索引是一颗B+树,非叶子节点存储的是主键,叶子节点存储的是整行数据;
  • 每组联合索引也是一棵B+树,非叶子节点存储的是索引值,叶子节点存储索引值和主键值;

image.png

所以题主问的索引数量不是字段数相乘的关系,无论联合了多少字段建索引,每条数据对应的叶子节点都是一个。

参考:InnoDb索引结构及特点

联合索引是指由N个字段组成的键作为索引列形成的索引,并不是创建N个单独的索引

比如你这里的a、b、c,按该顺序组成的索引列就是(a,b,c),那么排序的时候就会逐一按每列的值进行排序,先排a,a一样的时候排b,b一样的时候排c,如下图
image.png

需要注意的是:联合索引中列的顺序可以是不一样的,(a,b,c)和(b,c,a)是不一样的,因为会根据最左匹配原则来进行匹配,比如查询的时候只有a一个条件,那么会走(a,b,c)这个索引,但是并不会走(b,c,a)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏