前言:我们在实际开发中经常需要用到关联查询。这时查询的效率就显得十分重要了。
在常用的关联查询中我们经常用到左连接,内连接,外连接。这点做过开发的都知道,话不多说,本人最近开发过程中遇到一个问题,就是说需要用到左外连接的查询,原始sql如下:
SELECT
tr.*,
pr.reduce_amount AS reduceAmount
FROM
trans_record tr
LEFT JOIN pay_reduce_record pr ON tr.trans_id = pr.trans_id
<where>
<if test="null != request.orderNo and '' != request.orderNo">
AND tr.order_no = #{request.orderNo}
</if>
</where>
ORDER BY id DESC
LIMIT #{startNum},#{request.limit}
发布到生产,运维妹子发布了慢sql记录,该sql运行了7秒多(由于我们的数据量较多大概有百万条数据)于是添加了两个表的trans_id的索引,依然无效。这时我就在想是否可以优化sql,于是优化了以后sql
SELECT
tr.*,
pr.reduce_amount AS reduceAmount
FROM
( SELECT * FROM trans_record limit #{startNum},#{request.limit} tr
<where>
<if test="null != request.orderNo and '' != request.orderNo">
AND tr.order_no = #{request.orderNo}
</if>
</where>
) tr
LEFT JOIN pay_reduce_record pr ON tr.trans_id = pr.trans_id
ORDER BY
id DESC
优化完成后就快多了。请大家多多指教。