数据库索引

90 阅读2分钟

索引的作用

如果将新华字典看成是一个储存汉字的数据库,字典侧边的字母就是拼音索引。我们可以根据字母顺序快速检索汉字在字典中的位置。而数据库索引的作用就是帮助我们快速定位到数据行,提升查询效率。

选择索引字段的思路

  • 根据区分度选择索引字段。例如性别的区分度只有0.5,就不适合作为索引字段。
  • 根据业务实际情况选择索引字段。查询、连接、排序频率高的字段适合作为索引字段,更新频率高的字段不适合作为索引字段。
  • 将分表键作为索引字段。生产中常常根据业务日期进行分表,索引中包含业务日期字段,有助于检索到对应日期的分表。

索引对查询次数的影响

  • 使用主键索引,只需在主键索引树上查询一次。
  • 使用辅助索引,需要在辅助索引树上查询到主键,然后使用主键再查询一次,总共两次。
  • 使用索引覆盖,辅助索引树上包含的字段已满足查询需要,只需查询一次。
  • 使用索引下推,辅助索引树上包含的字段可以筛选掉不满足条件的字段,只需查询一次。

索引失效的原因

  • 未遵循最左前缀原则
  • 条件字段上使用函数
  • 条件字段与条件值类型不一样,条件类型发生隐式转换
  • like左边包含通配符%(考虑反转字符串+前缀匹配,或使用es)
  • 使用or关键字连接多个有索引的条件字段
  • 使用in关键字列表过大
  • 使用order by关键字时条件字段与排序字段不在同一个索引,或者升序与降序混用,或者查询返回数据量过大时,数据库可能会使用全表扫描+文件排序,放弃使用索引

索引的存储

  • 使用递增主键,减少磁盘数据页分裂。
  • 使用长度较短的字段作为主键,减少辅助索引的空间占用。
  • 使用联合索引(a,b,c)相当于(a,b,c)和(a,b)和(a)三个索引,利用了最左前缀原则。