left join on 筛选条件崩溃记录

场景:

        多字段关联时,  使用and连接多条件 和concat拼接参数后连接

        3表数据: i=28w e=1w c=13w

        

索引:
        i:  w_id和f_id   NORMAL
        c: w_id和f_id   NORMAL

sql:
        方式1:
SELECT
	i.id,
    i.w_id,
    i.f_id,
	c.avatar,
	c.name,
	IF( c.memo IS NULL OR length( c.memo ) = 0, i.memo, c.memo ) memo,
	e.detail,
	i.`code` 
FROM
	i
	LEFT JOIN e ON e.CUSTOMER_ID = i.id
	LEFT JOIN c ON ( i.w_id = c.w_id AND i.f_id = c.f_id ) 
WHERE
	i.intent IN ( 'A', 'B' ) 
	AND i.CREATED_TIME > '2023-02-01' 
	AND i.CREATED_TIME < '2023-07-06' 
	AND i.DELETED = 0 
ORDER BY
	i.CREATED_TIME DESC 
	LIMIT 50

修改为

        方式2:
SELECT
	i.id,
    i.w_id,
    i.f_id,
	c.avatar,
	c.name,
	IF( c.memo IS NULL OR length( c.memo ) = 0, i.memo, c.memo ) memo,
	e.detail,
	i.`code` 
FROM
	i
	LEFT JOIN e ON e.CUSTOMER_ID = i.id
	LEFT JOIN c ON CONCAT(i.w_id, i.f_id) = CONCAT(c.w_id,c.f_id)
WHERE
	i.intent IN ( 'A', 'B' ) 
	AND i.CREATED_TIME > '2023-02-01' 
	AND i.CREATED_TIME < '2023-07-06' 
	AND i.DELETED = 0 
ORDER BY
	i.CREATED_TIME DESC 
	LIMIT 50
崩溃经过:

方式1生产环境查询时长超过120s, 最终导致数据库连接池连接数耗尽, 最终服务假死

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值