四时宝库

程序员的知识宝库

你所不知道的mysql联合索引底层结构?

前面讲的都是单值索引,一般我们在工作环境中,一个表不可能让我们建立太多的单值索引,一般设计索引的目标:一张表通过建立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中进行搜索,找到主键,根据主键,在去联合主键树结构中去查找。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接