一、不要在索引字段上进行函数操作
背景
近期对系统进行慢SQL优化,通过订阅Mysql慢SQL日志搜集到了一批慢SQL。其中有一条SQL很奇怪,表中已有索引,并且表数据量并不很大,查询效率很低。
原因分析
根本原因:sql参数入参为long类型,数据库表为varchar类型,数据库进行了隐式转换,在索引列上进行了函数操作,导致索引失效。
解决办法
- 将代码中的方法入参类型改为long。
- 由于系统是读写分离的,在此方法上指定使用读库。
解决过程
- 准备
略过。。。。
二、不要在区分度不高的字段上创建索引
背景
其中有一条SQL用于like查询,表中已有索引,查询遵循左匹配,但是explian发现未走索引,索引失效。
原因分析
根本原因:like查询,区分度不高,导致索引失效。
解决办法
- 不要在区分度不高的字段上创建索引。
- 如果创建了索引,在遵循左匹配的时候,尽可能的增加入参区分度。
解决过程
- 准备
掠过。。。。。