mysql大数据量关联查询

前言:我们在实际开发中经常需要用到关联查询。这时查询的效率就显得十分重要了。
      在常用的关联查询中我们经常用到左连接,内连接,外连接。这点做过开发的都知道,话不多说,本人最近开发过程中遇到一个问题,就是说需要用到左外连接的查询,原始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

优化完成后就快多了。请大家多多指教。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值