前面讲的都是单值索引,一般我们在工作环境中,一个表不可能让我们建立太多的单值索引,一般设计索引的目标:一张表通过建立1-3个联合索引既能覆盖大部分查询条件。
联合主键索引
首先我们有一张学生表,表中有ID,name,age,class,addres,tellpone等字段,如果我们分析业务,按照name、age、class三个字段查询的时候较多,我们就可以用这三个字段设计一个联合索引。
KEY ‘index_name_age_class’ (‘name’,’age’,’class’) USING BTREE;
图1就是我们针对表中字段所创建的联合索引的底层树结构,在我们创建索引的时候,编写创建语句的时候是按照‘name’,’age’,’class’的顺序写的,根据索引最左前缀排序原理,在创建索引的时候,首先会按照name进行排序(比较name中每个字母的ASCII码值大小),name大小值相等,再比较年龄,年龄一样,比较class,如果都一样,则创建索引的时候,两个值就放在同一个节点上。
非联合主键索引
还是用上面的举例,如果上面三个字段,不是联合主键索引,那么区别就是下面挂载的值不同,非联合主键索引,下面挂载的值是表的主键,如果查询的时候,如果走了该索引,则会在图2中进行搜索,找到主键,根据主键,在去联合主键树结构中去查找。