索引
索引是什么
索引是一种数据结构,用于协助快速查询、更新数据库表中的数据
索引的类型
唯一索引/普通索引
- 唯一索引:明确规定了该索引不会出现重复值,查询时查到符合条件的值就停止查询
- 普通索引:查询时查到符合条件的值会继续查询,直到查到不符合条件的值
主键索引/普通索引
- 主键索引:叶子节点存放数据
- 普通索引:叶子节点存放主键值,需要回表才能得到数据
聚簇索引/非聚簇索引
- 聚簇索引:索引顺序与数据存储顺序一致/叶子节点放数据,一张表只能有一个聚簇索引,主键索引就是一种聚簇索引
- 非聚簇索引:叶子节点放主键值或者物理地址,与聚簇索引相比,需要回表或寻址操作
联合索引
- 由多个字段组成的索引
覆盖索引
- 索引已经包含了查询所需的所有字段,可以不用回表
索引的实现数据结构
- B+树及B+树的变种
- 哈希表
- 有序数组
索引的优缺点
优点
- 加快数据检索速度
缺点
- 索引需要占用物理空间
- 创建和维护索引需要耗费时间
索引的使用场景
- 主键自动建立唯一索引
- 频繁作为查询条件的字段应该创建索引
- 查询与其他表关联的字段,外键关系建立索引
- 高并发下创建组合索引
不建议索引的场景
- 表记录过小
- 经常增删改的表
- 数据重复且分布平均的表字段(例如性别)
- where用不到的字段
** 注:仅用于学习交流**