mysql中的索引可以加快加锁数据的效率,虽软索引的维护需要一定的代价。从不同的视角给相同的索引创建了五花八门的名字,理解分类的视角有助于记忆索引。
1、根据索引中存储的内容非为聚集索引和非聚集索引(二级索引)
a)聚集索引:叶子节点中存储的是数据所在行全部数据的物理地址,一个表中数据物理地址是唯一的,所以聚集索引一个表只会有一个。
b)非聚集索引:叶子节点存储的是聚集索引的索引值,所以根据二级索引查找需要两次查找才能确定数据行所在磁盘物理位置。
2、根据索引包含的列可以分为单列索引和复合索引
创建一个复合索引,需要根据字段查询频率确定复合索引的排列顺序。
3、主键索引、聚合索引和唯一索引关系
主键索引的值不能为空、不能重复;唯一索引的值不能重复、可以为空;当表中存在主键时,默认将主键索引作为聚集索引;表中没有主键索引,从上到下,将一个创建了唯一索引并且设置了不为空(not null)的列作为聚集索引;如果既没有主键索引、也没有设置为唯一索引并且不为空的列,则数据库底层会生成一个新的序列作为作为聚集索引。
4、根据索引实现的数据结构分为B-tree、R-tree和hash索引和full-text索引
R-tree在只适用于geometry数据、full-text适用char、varchar和text数据类型。