索引优化

索引优化

索引一定可以好么?

索引的代价

  • 空间上:存储索引页需要额外的空间。
  • 时间上:对数据的增删改都需要去维护索引。

如何使用索引能发挥最大能力?

会使用索引的场景

  • 全值匹配
  • 匹配左边的列
  • 匹配范围值
  • 精确匹配某一列并范围匹配另外一列
  • 用于排序
  • 用于分组

关于联合索引中的搜索顺序你知道吗?
尽量按照定义索引列时的顺序来查询。如索引是A,B,C,如果采用A,C,B的查找一般也是可以的,但是这只是命令执行过程中的一个“语法优化”的关系,比较老的数据库可能不支持。

范围查找会用到索引吗?
只有使用最左边的索引列的范围查找会用到索引。

为什么排序会用到索引?
没有索引的排序会将查出来的数据放到内存中,再采用排序算法去处理。如果排序的顺序和索引顺序一致,则可以省略到这一个步骤。但是需要注意带排序的顺序也要遵循定义索引列时的顺序

使用索引需要注意的事项

  • 只为用于搜索、排序或分组的列创建索引
  • 为列的基数大的列创建索引
  • 索引列的类型尽量小
  • 可以只对字符串值的前缀建立索引
  • 只有索引列在比较表达式中单独出现才可以适用索引
  • 为了尽可能少的让聚簇索引发生页面分裂和记录移位的情况,建议让主键拥有AUTO_INCREMENT属性。
  • 定位并删除表中的重复和冗余索引
  • 尽量适用覆盖索引进行查询,避免回表带来的性能损耗。