一、按照数据结构分类:
1、B-Tree索引:
B-tree以类似二分的结构,通过范围过滤的算法来提高查询效率,当关键字K在某节点命中后,获取该K的data来返回查询结果,这就是索引的底层原理。
2、B+Tree索引:
非叶子节点只存储键值信息, 数据记录都存放在叶子节点中。而B-tree的非叶子节点也存储数据。所以B+tree单个节点的数据量更小,在相同的磁盘I/O次数下,能查询更多的节点。
可以实现范围的查询
3、Hash索引:
hash表,检索效率很高,索引的检索可以一次定位,不像B-Tree索引那样需要从根节点到枝节点,最后才能访问到叶节点。
4、Full-text索引:
主要用来代替like "%***%"效率低下的问题
二、按照物理存储分类:
1、聚簇索引
默认是在主键上建立的索引,当然也可以根据情况改变,但是一个表中只能有一个聚簇索引。聚簇索引的索引顺序就是数据排列顺序。聚簇索引的叶子节点就包含了数据内容,当匹配到索引时也就找到了数据。
2、非聚簇索引(辅助索引;二级索引)
并不是在物理上排列数据,即索引中的逻辑顺序并不等于表中行的物理顺序。非聚簇索引不是唯一的。查找到索引之后,根据记录的数据地址,再去查找数据,索引没有聚簇索引查找的快。
这两种索引都可以加快查找的速度,但同时也会降低写入速度,聚簇索引对写入速度的影响更大。
三、按照字段特性分类:
1、主键索引
建立在主键上的索引被称为主键索引,一张数据表只能有一个主键索引,索引列值不允许有空值,通常在创建表时一起创建。
2、唯一索引
建立在UNIQUE字段上的索引被称为唯一索引,一张表可以有多个唯一索引,索引列值允许为空,列值中出现多个空值不会发生重复冲
3、普通索引
建立在普通字段上的索引被称为普通索引。
4、前缀索引
是指对字符串类型字段的前几个字符或对二进制字段的前几个byte建立的索引,而不是在整个字段上建索引。前缀索引可以建立在类型为char、varchar、binary、varbinary的列上,可以大大减少索引占用的存储空间,也能提升索引的查询效率。
四、按照索引字段个数分类:
1、单列索引
建立在单个列上的索引被称为单列索引
2、联合索引(符合索引,组合索引)
建立在多个列上的索引被称为联合索引,又叫复合索引、组合索引。“最左前缀”:当索引列为(a,b,c)时,在查找是是先匹配a列,在匹配b列最后匹配c列。也就是说相当于建立了(a),(a,b),(a,b,c)三个索引。
五、底层数据结构:
二叉树;红黑树;hash;B-Tree;B+Tree
六、为什么索引查找的速度快?
索引可以加快数据库的检索速度,但是会降低新增、修改、删除操作的速度,一些错误的写法会导致索引失效等等。
查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度。