数据库索引

1.分类

 一般分为聚集索引和非聚集索引,二者一般采用B树或者hash方法实现,但是较常用的是B树(mysql默认采用的,设计数据库时可以选择),这里主要讲采用B树的方式。hash方法效果听说并不是很好。

聚集索引是采用B+树实现,非聚集索引使用B-树实现

2.区别

聚集索引:所有关键字记录仅保存在叶子节点中(叶子节点中的多个关键字以链表连接),索引节点不保存记录,仅保存索引关键字,同一索引下的叶子节点按序存储,查找快。但是主键上聚集索引插入操作时会比较慢,因为要比较所有叶子节点上主键是否有和插入的相同

非聚集索引:索引节点保存记录的关键字,及指向该关键字的指针,同一索引的记录不按序存储,查找慢。但是在主键上的聚集索引插入操作时只需要比较索引节点即可

3.适用场景

数据库索引_第1张图片

4.优点

1)最大好处是可以加快检索速度

2)在经常分组或者排序字段上加索引,会提高检索时间

3)创建唯一索引可以保证数据库每一行数据的唯一性

4)通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能

5)可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义

5.缺点

1)创建和维护索引都需要开销

2)索引需要一定的物理空间开销,尤其是聚集索引

3)增删改时,索引要动态维护

6.应该在哪些列建立索引

1)经常分组或排序的列

2)where子句的查询属性列上

3)经常查询的属性列或者经常按范围查找的属性列上

4)主键

7.哪些列不应建立索引

1)仅有少量值的列上,比如性别,只有男女

2)很少使用的列,建立索引可能会比不建立有更多的开销

3)对text、image、bit列上,这些列的数据量要么比较多,要么很少

4)修改较多,但是检索较少的列上

你可能感兴趣的:(数据库索引)