一、索引的概念
索引相当于一本书的目录,可以加快查找速度。
innodb和myisam存储引擎的索引都使用了b+树这种数据结构。
二、聚簇索引和非聚簇索引
1、概述
这里先说明下,聚簇索引又叫聚集索引,非聚簇索引又叫非聚集索引。
【重要:聚簇索引和非聚簇索引并不是索引类型,而是数据的存储方式。】
聚簇,就是数据的最终查找要靠主键索引来定位数据;
非聚簇,就是不靠主键索引也可以定位到数据。
2、聚簇索引存储方式中是如何查找到最终数据的
聚簇索引存储方式中,分为主键b+树和辅助键b+树。
主键索引在主键b+树上,其他索引各有一棵辅助键b+树。主键b+树上,叶子节点存储的就是真实数据,辅助键b+树上,叶子节点存储的是主键ID。
用户要查找一条记录,如果where条件是主键,则可以直接到主键b+树上定位到对应的叶子节点,然后直接从叶子节点取出数据。
如果where条件不是主键索引,而是其他索引,则先到辅助键b+树上取到符合条件的主键ID,再拿着这个ID到主键b+树上取到数据。
聚簇索引存储方式的代表引擎是innodb,聚簇索引存储方式必须要有主键,如果在建表时没有指定主键,则MySQL会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键。
3、非聚簇索引存储方式中是如何查找到最终数据的
非聚簇索引中,虽然也分为主键b+树和辅助键b+树,但二者的区别并不大,地位几乎相等,没有以谁为中心的概念,代表存储引擎是myisam。
非聚簇索引存储方式中,在主键b+树和辅助键b+树中,叶子节点存储的都是数据的物理地址。
用户查找一条记录,根据where条件到对应索引所在的b+树上查找到符合条件的记录,然后拿到数据的物理地址,进而到磁盘上获取数据。
非聚簇索引存储方式中,数据文件和索引文件是分开的,这点和聚簇索引存储方式有着本质上的不同。