1、字段区分度不高的索引,批量操作时,条数少于10个时会走索引,大于10个不走索引,可以如下优化
<select id="xxx" resultType="java.lang.Long">
<foreach collection="list" item="item" separator="union all" >
select id
from table
where cost_bill_no = #{item}
</foreach>
</select>
2、使用min(),max()函数查询某字段时,可以使用order by 排序取limit 1
修改前:
SELECT MIN(year) FROM table WHERE company_id = 1 AND acc_status = 2
修改后:已根据company_id ,year 简历组合索引
SELECT year FROM table WHERE company_id = 1 AND acc_status = 2 order by year limit 1
3、limit影响优化器对索引的选择,对于一些没有走预期索引的SQL可以加limit调试
4、group by默认会根据字段排序,后面有order by字段时,可以把字段写在group by后
5、优化器是基于时间和成本综合代价选择索引