数据库索引
一、为什么引入索引
1. 数据库查询的时候,会进行全表扫描,即每行数据都进行比较
2. 创建了索引,相当于为数据创建了一个目录,避免了全表扫描,提高查询效率
二、索引是什么
1. 索引是一个数据结构,最常用的数据结构是平衡树,即B tree或者B+ tree;也有Hash索引,用hash表作为索引
2. 不是二叉树,因为高度不均匀,不能自平衡
三、索引从存储结构上分类
1. BTree索引:数据分布在各个节点中,非叶子节点的数据查询效率低
2. B+Tree索引:数据只分布在叶子节点中,并且增加了顺序访问指针,比B-Tree效率高
2. Hash索引,没有顺序,IO复杂度高,对所有的索引列计算一个hash值,存储在索引中
3. full-index全文索引
四、从应用层次上分类
1. 普通索引:一个索引只包含单个列,一张表可以有多个单列索引
2. 唯一索引:索引列的值必须唯一,可以为null,一张表可以有多个唯一索引
3. 复合索引:多列组成一个索引,专门用于组合搜索,其效率大于索引合并
五、从物理顺序和索引顺序关系分类
1. 聚集索引,可以直接查到数据,是查到真实数据的唯一路径,用B+树实现
a. 将一个或多个组合列值相同的记录进行排序后移动到一起,创建或删除聚集索引将引起非聚集索引重建
b. 聚集索引关键字可以重复
c. 一张表里只能有一个聚集索引
2. 非聚集索引:也叫二级索引,独立的索引,生成索引表,占用磁盘空间;先查到主键,再通过聚集索引查到数据
六、主键:没加主键时,数据在磁盘上整齐但是无序存储;加了主键后,数据变成了平衡树结构
1. 一张表只能有一个主键,也只能有一个聚集索引
2. 主键是一种约束,而不是索引
3. 主键不能为null
4. 创建主键时会自动创建聚集索引,但聚集索引可以在不同的字段上创建
5. 为什么要用自增主键作为索引,因为自增主键是连续的,插入B+Tree时,会对B+Tree进行重新调整,自增主键会减少分裂和移动
七、唯一键约束
1. 唯一约束也用来保证唯一性
2. 作为一种独特的约束,自动创建了唯一非聚集索引,实际上唯一键约束是用唯一索引来约束的
3. 一张表可以有多个唯一约束