索引优化
索引一定可以好么?
索引的代价
- 空间上:存储索引页需要额外的空间。
- 时间上:对数据的增删改都需要去维护索引。
如何使用索引能发挥最大能力?
会使用索引的场景
- 全值匹配
- 匹配左边的列
- 匹配范围值
- 精确匹配某一列并范围匹配另外一列
- 用于排序
- 用于分组
关于联合索引中的搜索顺序你知道吗?
尽量按照定义索引列时的顺序来查询。如索引是A,B,C,如果采用A,C,B的查找一般也是可以的,但是这只是命令执行过程中的一个“语法优化”的关系,比较老的数据库可能不支持。
范围查找会用到索引吗?
只有使用最左边的索引列的范围查找会用到索引。
为什么排序会用到索引?
没有索引的排序会将查出来的数据放到内存中,再采用排序算法去处理。如果排序的顺序和索引顺序一致,则可以省略到这一个步骤。但是需要注意带排序的顺序也要遵循定义索引列时的顺序
使用索引需要注意的事项
- 只为用于搜索、排序或分组的列创建索引
- 为列的基数大的列创建索引
- 索引列的类型尽量小
- 可以只对字符串值的前缀建立索引
- 只有索引列在比较表达式中单独出现才可以适用索引
- 为了尽可能少的让聚簇索引发生页面分裂和记录移位的情况,建议让主键拥有AUTO_INCREMENT属性。
- 定位并删除表中的重复和冗余索引
- 尽量适用覆盖索引进行查询,避免回表带来的性能损耗。