什么是索引(BTree):
- 索引是排好序的快速查找数据结构
- 是帮助MySQL高效获取数据的数据结构
- 满足某种特定查找算法数据结构
- 以某种方式引用数据,在这些数据结构的基础上实现高级查找算法的数据结构
- 一般不会全部加载到内存,往往以文件的形式存储在磁盘上
索引优势:
- 提高数据检索效率,降低数据库的IO成本
- 通过索引字段排序,降低排序成本,降低CPU的消耗
索引的劣势:
- 索引也是一张表,保存了自身主键和索引字段,并指向实体记录,也需要占用空间
- 查询快但是insert、update、delete会变慢,因为要同时更新添加了索引的字段
- 若mysql存在大数量的表,就需要研究建立最优秀的索引
索引分类:
- 单值索引:索引包含单列,一张表可以有多个单值索引。
- 唯一索引:必须唯一,允许为空
- 主键索引:必须唯一,不允许为空
- 复合索引:包含多个列
索引结构:
- BTree索引(主)
- Hash索引
- full-text全文索引
- R-Tree索引
哪些情况下要建索引:
- 主键自动索引
- 频繁查找的字段
- 与其他表关联的字段外键字段
- 高并发下倾向于组合索引
- 查询中统计分组的字段
- 查询中排序的字段
哪些情况下不要建索引:
- 表记录太少
- 数据重复太多字、且平均分配字段
- 频繁更新的字段
- 不在where查询条件的字段