2021-01-28
mysql数据库复杂sql优化问题
5M生产环境有条慢sql需优化,耗时609s,如下:
sum( fsl_unrelease_pack_ob_lines.qty ) AS qty_sum,
sum( fsl_unrelease_pack_ob_lines.box_qty ) AS box_qty_sum,
sum( fsl_unrelease_pack_ob_lines.release_qty ) AS release_qty_sum,
sum( fsl_unrelease_pack_ob_lines.box_qty - fsl_unrelease_pack_ob_lines.release_qty ) AS unrelease_qty_sum,
sum( fsl_unrelease_pack_ob_lines.box_qty - fsl_unrelease_pack_ob_lines.release_qty ) AS add_qty_sum,
sum( fsl_unrelease_pack_ob_lines.weight ) AS weight_sum,
sum( fsl_unrelease_pack_ob_lines.volume ) AS volume_sum
FROM
fsl_order_base_line AS fsl_unrelease_pack_ob_lines
LEFT JOIN fsl_order_base AS ob ON fsl_unrelease_pack_ob_lines.order_base = ob.id
WHERE
ob.model1 = 'pack'
AND ob.project_code = 'DD'
AND fsl_unrelease_pack_ob_lines.domain_name IN ( 'FSL' )
AND fsl_unrelease_pack_ob_lines.origin IN (
SELECT
location
FROM
fsl_zone_part t1
JOIN fsl_location t2 ON t1.zone1 = t2.id
WHERE
t2.NAME = 'xx')

》》 查看执行计划如下:

》》表数据量如下:

》》考虑优化:改写sql+强制索引
这里是考虑小表驱动大表
改写后的sql如下,需强制索引才走对应的执行计划
sum( fsl_unrelease_pack_ob_lines.qty ) AS qty_sum,
sum( fsl_unrelease_pack_ob_lines.box_qty ) AS box_qty_sum,
sum( fsl_unrelease_pack_ob_lines.release_qty ) AS release_qty_sum,
sum( fsl_unrelease_pack_ob_lines.box_qty - fsl_unrelease_pack_ob_lines.release_qty ) AS unrelease_qty_sum,
sum( fsl_unrelease_pack_ob_lines.box_qty - fsl_unrelease_pack_ob_lines.release_qty ) AS add_qty_sum,
sum( fsl_unrelease_pack_ob_lines.weight ) AS weight_sum,
sum( fsl_unrelease_pack_ob_lines.volume ) AS volume_sum
FROM
fsl_zone_part t1 JOIN fsl_location t2 ON t1.zone1 = t2.id
join
fsl_order_base_line AS fsl_unrelease_pack_ob_lines force index(index_obl_origin) on fsl_unrelease_pack_ob_lines.origin=t1.location
LEFT JOIN fsl_order_base AS ob ON fsl_unrelease_pack_ob_lines.order_base = ob.id
WHERE t2.NAME = '华南'
AND ob.model1 = 'pack'
AND ob.project_code = 'DD'
AND fsl_unrelease_pack_ob_lines.domain_name IN ( 'FSL' )
执行计划:

但耗时仍需400s,请问下有进一步优化空间?
我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏


评论
