今天在做项目的时候,发现有一个接口的查询速度特别慢,要一分多钟,直接导致接口超时。查看接口的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两个表的响应字段改成同一个字符集和排序规则,问题完美解决!这么奇葩的问题还是第一次遇到。
==============================================================================
读万卷书,行万里路
==============================================================================