从数据结构
1.BTREE索引:最常见的索引类型,大部分索引都支持B树索引
2.HASH索引:只有Memory引擎支持,使用场景简单。
3.R-tree索引(空间索引):空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少。
4.Full-text(全文索引):全文索引也是MyISAM的一个特殊索引类型,主要用于全文索引,InnoDB从Mysql5.6开始支持全文索引。
三种存储引擎对各索引类型的支持
从类型上
1.单值索引:即一个索引只包含单个列,一个表可以有多个单列索引
3.复合索引:即一个索引包含多个列
从物理存储角度上
聚簇索引与非聚簇索引
聚簇索引:
是对磁盘上实际数据重新组织以指定的一个或多个列的值排序的算法
聚簇索引使用主键索引来组织数据,如果不创建主键的话它会默认选择一组合适的列作为主键,如果没有合适列则默认自行创建这样一列。 叶节点包含包含索引字段及值。
特点是存储数据的顺序和索引顺序一致,且一个表只能有一个聚簇索引,因为物理存储只能有一个顺序
非聚簇索引
表数据存储顺序与索引顺序无关。对于非聚簇索引,叶结点包含索引字段值及指向数据页数据行的逻辑指针,一个表对应的非聚簇索引可以有多条,根据不同列的约束可以建立不同要求的非聚簇索引;
聚簇索引的叶子节点就是数据节点(Innodb的B+树的主键对应的数据节点),而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。
聚簇索引主键的插入速度要比非聚簇索引主键的插入速度慢很多。
相比之下,聚簇索引适合排序,非聚簇索引不适合用在排序的场合。因为聚簇索引本身已经是按照物理顺序放置的,排序很快。非聚簇索引则没有按序存放,需要额外消耗资源来排序。
从逻辑角度上
1.普通索引 最基本的索引,它没有任何限制,用于加速查询。
2.唯一索引 索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
3.主键索引 是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。
主键索引和聚簇索引的区别
主键索引是强制表的实体完整性
聚簇索引是对数据的排序方便查询
看这个就ok了其他的不管
1.普通索引 最基本的索引,它没有任何限制,用于加速查询。
2.唯一索引 索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
3.主键索引 是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。
4.组合索引 指多个字段上创建的索引。
5.全文索引 主要用来查找文本中的关键字,而不是直接与索引中的值相比较。