1.分类
一般分为聚集索引和非聚集索引,二者一般采用B树或者hash方法实现,但是较常用的是B树(mysql默认采用的,设计数据库时可以选择),这里主要讲采用B树的方式。hash方法效果听说并不是很好。
聚集索引是采用B+树实现,非聚集索引使用B-树实现
2.区别
聚集索引:所有关键字记录仅保存在叶子节点中(叶子节点中的多个关键字以链表连接),索引节点不保存记录,仅保存索引关键字,同一索引下的叶子节点按序存储,查找快。但是主键上聚集索引插入操作时会比较慢,因为要比较所有叶子节点上主键是否有和插入的相同
非聚集索引:索引节点保存记录的关键字,及指向该关键字的指针,同一索引的记录不按序存储,查找慢。但是在主键上的聚集索引插入操作时只需要比较索引节点即可
3.适用场景
4.优点
1)最大好处是可以加快检索速度
2)在经常分组或者排序字段上加索引,会提高检索时间
3)创建唯一索引可以保证数据库每一行数据的唯一性
4)通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能
5)可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义
5.缺点
1)创建和维护索引都需要开销
2)索引需要一定的物理空间开销,尤其是聚集索引
3)增删改时,索引要动态维护
6.应该在哪些列建立索引
1)经常分组或排序的列
2)where子句的查询属性列上
3)经常查询的属性列或者经常按范围查找的属性列上
4)主键
7.哪些列不应建立索引
1)仅有少量值的列上,比如性别,只有男女
2)很少使用的列,建立索引可能会比不建立有更多的开销
3)对text、image、bit列上,这些列的数据量要么比较多,要么很少
4)修改较多,但是检索较少的列上