为了账号安全,请及时绑定邮箱和手机立即绑定

SQL优化案例—or改为union

标签:
MySQL

Uploading file...

原始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
file

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
数据库工程师
手记
粉丝
0
获赞与收藏
7

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消