一、聚集索引
如果我们给表上了主键,那么表在内存上由整齐的排列结构变成了树状结构,也就是【平衡树】结构,换句话说就是整个表变成了一个索引——【聚集索引】,这就是为什么一个表真能勾一个主键,一个表只能有一个【聚集索引】,因为主键的作用就是把表的数据格式转换成为了(索引)【平衡树】的格式存放。
InnoDB使用的是 【聚簇索引】
二、非聚集索引
非聚集索引和聚集索引一样,同样采用平衡树作为索引的数据结构。索引树结构中各个节点的值来自于表中的索引字段,假如给user表的name字段加上索引,那么索引就是由name字段中的值构成,在数据改变时,DBMS(数据库管理系统)需要一直维护索引结构的正确性。如果给表中多个字段加上索引,那么就会出现多个独立的索引结构。每个非聚集索引互相之间不存在关联。
MyISAM使用的是【非聚簇索引】
三、两者之间的区别
①聚集索引在叶子节点存储的是表中的数据
②聚集索引表示表中存储的数据按照索引的顺序存储,检索效率比非聚集索引高,但对数据更新影响较大。
③通过聚集索引可以直接查到需要查找的数据
④非聚集索引在叶子节点存储的是主键和索引列。
⑤使用非聚集索引查询出数据时,拿到叶子上的主键再去查到想要查找的数据。(拿到主键再查找这个过程叫做【回表】或者叫做【回旋】)。
⑥非聚集索引表示数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置,非聚集索引检索效率比聚集索引低,但对数据更新影响较小。