索引优化策略

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

select….from product

where to_days(out_date)-to_days(current_date)<=30;

索引优化策略

    • select….from product out_date<=date_add(current_data,interval 30 day);

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

create index index_name on table (col_name(n));

索引的选择性是不重复的索引值和表的记录数的比值。

联合索引

如何选择索引列的顺序

经常会被使用到的列优先

选择性高的列优先

宽度小的列优先

覆盖索引

优点

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

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

可以避免对Innoddb主键索引的二次查询;

可以避免MyISAM表进行系统调用;

无法使用覆盖索引的情况

存储引擎不支持覆盖索引;

查询中使用了太多的列;

使用了双%号的like查询;

使用索引来优化查询

使用索引扫描来优化排序

通过排序操作

按照索引顺序扫描数据

使用索引扫描来优化排序

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

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

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

模拟Hash索引优化查询

只能处理键值的全值匹配查找;

所使用的Hash函数决定着索引键的大小;

利用索引优化锁

索引可以减少锁定的行数

索引可以加快处理速度,同时也加快了锁的释放

索引的维护和优化

删除重复和冗余的索引

查找未被使用过的索引

SELECT object_schema,object_name,index_name,b.`TABLE_ROWS` FROM performance_schema.table_io_waits_summary_by_index_usage a JOIN information_schema.tables b ON

a.`OBJECT_SCHEMA`=b.`TABLE_SCHEMA` AND

a.`OBJECT_NAME`=b.`TABLE_NAME`

WHERE index_name IS NOT NULL

AND count_star=0

ORDER BY object_schema,object_name;

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

analyze table  table_name

optimize table table_name(使用不当会导致锁表)

 

转载于:https://www.cnblogs.com/lovebean/p/10665055.html

你可能感兴趣的:(索引优化策略)