ITPub博客

首页 > IT职业 > IT职场 > SQL优化案例—or改为union

SQL优化案例—or改为union

IT职场 作者:ywbair 时间:2021-09-09 08:52:31 0 删除 编辑

图片描述

原始SQL(平均执行时间2s+)

SELECT DISTINCT
	sid
FROM
	test
WHERE
	cid = 123456
AND (
	(eid = 7890123)
	OR sid IN (
		SELECT
			sid
		FROM
			test
		WHERE
			cid = 123456
		GROUP BY
			sid
		HAVING
			COUNT(*) = 1
	)
)

430万+数据量的表,索引如下:

KEY idx_eid (eid)
KEY index_0 (cid,type)
KEY index_1 (sid,type,eid)
KEY idx_cs (cid,sid)

优化后SQL(平均执行时间400ms左右)

SELECT DISTINCT sid FROM test  WHERE cid = 900458 AND eid = 1021355 
union  
SELECT sid FROM test  WHERE cid = 900458 GROUP BY sid HAVING COUNT(*) = 1

说明:
mysql版本5.6.28
优化前,test和子查询都使用的idx_cs索引,cid 的基数不如eid,所以拆开后第一个test 使用eid索引,第二次使用的idx_cs
图片描述

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2056/viewspace-2797502/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-16

  • 博文量
    84
  • 访问量
    666