你的位置:首页 > 数据库

[数据库]索引优化策略

在表上创建索引后,如何使用到这些索引需要注意的问题。

 

1.索引列上不能使用表达式或函数。

例如:

select * from users where upper(name)=’ABC';

改成

select * from users where  name=’ABC';

 

2.前缀索引和索引列的选择性

索引的选择性越高索引效率越高。

 

3.联合索引

如何选择索引列的顺序

1.经常会被使用到的列优先

联合索引的列索引顺序是从左到右使用的。

2.选择性高的列优先

选择性很差的列不宜放到最左边。比如状态列。

3.宽度小的列优先

 

4.覆盖索引

索引中包含了所有查询的字段的情况的索引。

优点:

可以优化缓存,减少磁盘IO操作。

可以减少随机IO 变随机IO为顺序IO操作。

避免对INNODB主键索引的二次查询

可以避免myisam表进行系统调用

无法使用覆盖索引的情况:

1.存储引擎不支持覆盖索引

2.查询中使用了太多的列。

3.使用了双%号的like查询

 

5.使用索引扫描优化排序

  索引的列顺序和order by 子句的顺序完全一致

索引中所有列的方向(升序和降序)和order by 子句完全一致

order by 中 的字段全部在关联表中的第一张表中。

 

6.利用索引优化锁

1.索引可以减少锁定的行数

2.索引可以加快处理速度,同时加快锁的释放。

 

7.删除重复和冗余的索引

重复的索引:

比如:

primary key(id),unique key (id) ,index (id);

这样索引就重复了

冗余的索引:

index(name) ,index(name,age) 联合索引,那么 index(name) 就冗余了。

 

可以使用工具

pt-duplicate-key-checker –h=localhost 检查重复索引。

 

查找未被使用过的索引:

 

更新索引统计信息及减少索引碎片

analyze table table_name;