暂无图片
MySQL sql优化 问题
我来答
分享
黄伟波
2020-10-16
MySQL sql优化 问题
暂无图片 5M

今天看到一条sql,感觉不太好优化,放出来集思广益…
问题sql

EXPLAIN SELECT
	x.id,
	x.version,
	x.order_no1,
	x.order_status,
	x.delivery_status,
	x.delivery_time,
	y.delivery_status AS _delivery_status,
	y.unload_time AS _unload_time 
FROM
	fsl_order_base x
	JOIN (
	SELECT
		( CASE WHEN delivery_qty = qty THEN 2 WHEN delivery_qty < qty THEN 1 ELSE 0 END ) delivery_status,
		order_no1,
		unload_time 
	FROM
		(
		SELECT
			SUM( t2.box_qty ) delivery_qty,
			SUM( t1.qty ) qty,
			t.order_no1,
			MAX( t4.unload_time ) unload_time 
		FROM
			fsl_order_base t
			LEFT JOIN fsl_order_base_line t1 ON t.id = t1.order_base
			LEFT JOIN fsl_order_unit_box t2 ON t2.order_base_line = t1.id
			JOIN (
			SELECT
				id,
				dest,
				shipment,
				order_unit,
				unload,
				unload_time 
			FROM
				fsl_order_movement_unit 
			WHERE
				unload = TRUE 
				AND datediff( now( ), unload_time ) < 30 
			) t4 ON t2.order_unit = t4.order_unit
			JOIN fsl_shipment t6 ON t4.shipment = t6.id 
			AND t6.is_a_shipment = 'Y'
			JOIN fsl_shipment_stop t5 ON t5.id = t4.dest 
			AND t5.location = t1.dest 
		WHERE
			t.order_status IN ( '1', '2' ) 
			AND ( t.delivery_status <> '2' OR t.delivery_time IS NULL ) 
			AND t.project_code = 'FS' 
		GROUP BY
			t.order_no1 
		) a 
	) y ON x.order_no1 = y.order_no1 
	AND x.project_code = 'FS' 
	AND ( x.delivery_status <> 2 OR x.delivery_time IS NULL ) 
	AND ( x.delivery_status <> y.delivery_status OR x.delivery_time <> y.unload_time )

执行计划如下:
image.png

大佬们给个优化意见和思路?

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
黄伟波

fsl_order_base表,简称t表,t表的,order_status,project_code的区分度都很低,没法建索引

》》t表索引情况
t表建了28个索引
image.png

暂无图片 评论
暂无图片 有用 0
黄伟波

该sql执行了1525s仍无出结果

image.png

暂无图片 评论
暂无图片 有用 0
Cui Hulong

看到sql语句有点太复杂了。explain 看看能不能优化
1.像这样的sql 语句 能用inner join + 主键join方式最好
2.不要进行多表嵌套关联。

优化的力度应该有,但问题依然还会存在,建议拆分。
拆分方式:
1.mysql里join也不好太多,保持两张表
2.inner join + 主键关联
3.小表驱动大表方式

暂无图片 评论
暂无图片 有用 0
chengang

语句太长了。至少有一点可以做很大的优化。因为是inner join
所以你x表的所有过滤应该都可以写在嵌套查询的t表上进行过滤

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏