Mysql的 LFET/RIGHT JOIN查询慢的原因之一

在一次项目中,由于A表与B表在左连接操作时,因id与fid字段的字符集和排序规则不一致,导致接口查询速度极慢。通过调整两表字段的字符集和排序规则至统一,成功解决了查询效率问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在做项目的时候,发现有一个接口的查询速度特别慢,要一分多钟,直接导致接口超时。查看接口的sql,发现是一个左连接

SELECT
	A.* 
FROM
	A
	LEFT JOIN B ON A.id = B.fid 
WHERE
	A.age = 18 
	AND A.TIME_ IS NOT NULL 
ORDER BY
	A.START_TIME_ DESC 
	LIMIT 0,10

A表数据有30000条左右,B表数据有20000条左右,刚开始定位以为是ORDER BY的速度比较慢,做了相关的优化,没明显的改善。

经过了一番折腾,发现A表id和B表的fid字段字符集和排序规则不一致!!!

A表的字符集排序规则如下图:

B表的字符集排序规则如下图:

解决办法:将A、B两个表的响应字段改成同一个字符集和排序规则,问题完美解决!这么奇葩的问题还是第一次遇到。

 

==============================================================================

                                                          读万卷书,行万里路

==============================================================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值