在生产环境中,表未加索引,四万多条数据导出用一个多小时,客户体验差,应急修改
最近学员遇到问题,说自己写出来了生产问题,看sql并没有任何问题,但是执行速度特别慢,要进行sql优化,不知道怎么下手,我在此简单说一下,但是不能暴露源码,举个例子
源代码
-
<select id="exportBusi" resultType="com.gongsi.it.busi.vo.ExportBusiVO"> select * from base_t t left join number_t tm on t.id =tm.head_id keft join project_t ep on t.id =ep.head_id where 1=1 and ... limit #{pageVO.index},#{pageVO.pageSize} <select>
-
整个sql大概是这样,大家看一下,发现也并没有什么问题
问题
- 整个sql没有背景的情况下是看不出来问题的,但是number_t的head_id并没有使用索引,造成每次都进行全表扫描
- 还有就是sql的分页,每页是200条数据,在大批量的情况下,这个分页大小太小了,200条每页要查200多次
- 综合上面两条就会发现执行速度会很慢了,毕竟是相乘的关系
解决方案
- 增加每页的数量
- 增加head_id为索引
- 在进行关联查询之前我们可以尽可能缩小数据量进行关联
经过修改之后,在一秒以内