按照物理实现方式,索引可以分为两大类:
1)聚集索引:在聚集索引里,表中数据行按索引的排序方式进行存储,对查找行很有效。只有当表包含聚集索引时,表内的数据行才会按找索引列的值在磁盘上进行物理排序和存储。每张表只能有一个聚集索引,原因很简单,因为数据行本身只能按一个顺序存储。
2)非聚集索引:非聚集索引也称为二级索引或者辅助索引,对于非聚集索引,数据库会有单独的存储空间来存放。非聚集索引在查找的时候要经过两个步骤,需要先搜索非聚集索引的B+Tree,这个B+Tree的叶子结点存储的不是完整的数据行,而是主键值,当搜索完成后得到主键的值,然后拿着主键值再去搜索主键索引的B+Tree,就可以获取到一行完整的数据。
InnoDb:主键索引采用聚集索引,非主键索引是非聚集索引
MYISAM:均采用非聚集索引
通过聚集索引可以直接查询到一行的记录,不用回表查询;
但通过普通索引(非聚集索引)需要扫描两遍索引树。(即如果在查询中用到了非聚集索引,那么就会搜索两棵 B+Tree,第一次搜索 B+Tree 拿到主键值后再去搜索聚集索引的 B+Tree,这个过程就是所谓的回表。)
例如:
非聚集索引一般也称为二级索引或者辅助索引,对于非聚集索引,数据库会有单独的存储空间来存放。非聚集索引在查找的时候要经过两个步骤,例如执行 select * from user where username='goboy'(假设 username 字段是非聚集索引),那么此时需要先搜索 username 这一列索引的 B+Tree,这个 B+Tree 的叶子结点存储的不是完整的数据行,而是主键值,当搜索完成后得到主键的值,然后拿着主键值再去搜索主键索引的 B+Tree,就可以获取到一行完整的数据。
数据库索引可以按照两种思路来分类:按照功能分和按照存储方式分。
注意:主键索引是一种特殊的聚集索引,它是唯一的,并且在许多数据库管理系统中,主键索引是默认的聚集索引。在设计表结构时,应根据具体的需求选择合适的索引类型。如果需要快速查询和排序数据,则使用聚集索引;如果需要唯一标识表中的行,则使用主键索引。
标签:聚集,Tree,索引,键值,与非,搜索,主键 From: https://www.cnblogs.com/beatle-go/p/18054835