mybatis中使用一对多导致查询效率慢 求解决
问题描述:
1.一对多中按年月分组
<resultMap id="stuClassAwayQuery" type="com.wlpy.common.vo.report.StuPrecollectedVo">
<result column="stuId" jdbcType="INTEGER" property="stuId" />
<result column="classId" jdbcType="VARCHAR" property="classId" />
// 数据过多 for查询导致效率低
<collection property="yearQueryVO" select="yearQuery" column="{stuId=id,classId=classId}">
<result column="year" jdbcType="VARCHAR" property="year" />
<result column="month" jdbcType="VARCHAR" property="month" />
<result column="money" jdbcType="VARCHAR" property="money" />
</collection>
</resultMap>
SELECT
ar.class_id,
ar.stu_id
FROM
apply_relation AS ar
SELECT
DATE_FORMAT( scr.attendance_time, '%Y-%m-%d' ) AS `year`,
DATE_FORMAT( scr.attendance_time, '%m' ) AS `month`,
IFNULL( sum( scr.course_price ), 0 ) AS money
FROM
stu_course_relation AS scr
WHERE
scr.class_id = 1 #{classId}
AND scr.stu_id = #{stuId}
GROUP BY
DATE_FORMAT(
scr.attendance_time,
'%Y%m')
答
看一下这条sql的执行计划,按需求建立查询索引。
答
第二条sql语句查询时不用sql函数 另外换成left join试下
如果还慢,那把第一条放到缓存再试下
答
并没有看到for循环哈
一次查不出来,是吗?需要分页?两条都不慢的话,直接第一条放缓存里呗