假如有三个字段a,b,c,数据库记录有100万,那如果建a,b,c的联合索引,那这个联合索引的数量就应该是100万*100万*100万么,会不会也太大了,是不是说明联合索引的效率一般?
联合索引是指由N个字段组成的键作为索引列
形成的索引,并不是创建N个单独的索引
比如你这里的a、b、c,按该顺序组成的索引列就是(a,b,c),那么排序的时候就会逐一按每列的值进行排序
,先排a,a一样的时候排b,b一样的时候排c,如下图
需要注意的是:联合索引中列的顺序可以是不一样的,(a,b,c)和(b,c,a)是不一样的
,因为会根据最左匹配原则
来进行匹配,比如查询的时候只有a一个条件,那么会走(a,b,c)这个索引,但是并不会走(b,c,a)
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.3k 阅读
3 回答1.1k 阅读✓ 已解决
3 回答1.9k 阅读
2 回答1.9k 阅读
InnoDB每组索引是一颗B+树,分为叶子节点和非叶子节点:非叶子节点只会存储索引列和指向下级节点的指针,而叶子节点存储的是真实数据页。
所以题主问的索引数量不是字段数相乘的关系,无论联合了多少字段建索引,每条数据对应的叶子节点都是一个。
参考:InnoDb索引结构及特点