Schema:
CALL (ID,USER_ID(Foreign key),SP_USER_ID(Foreign key))
USER (ID,NAME)查询1:
SELECT u.name,
v.name
FROM call c
INNER JOIN USER u
ON c.user_id = u.id
INNER JOIN USER v
ON c.sp_user_id = v.id 查询2:
SELECT u.name
FROM call c
INNER JOIN USER u
ON c.user_id = u.id 查询2工作正常,结果也很快就会出现。
但是查询1需要花费大量时间,有时还会导致MySQL客户端崩溃(查看解释计划,它显示了其中一个用户表的“连接缓冲区”)。
在SP_USER_ID或USER_ID上的"where“条件会很快给出结果,但它不在可接受的范围内。”where“条件对其他列没有任何影响。
在这种情况下,如何避免连接缓冲区以获得更快的结果,并通过联接或其他方式获得所需的结果?
发布于 2013-12-17 03:53:02
希望USER_ID列上有索引,而SP_USER_ID列上没有索引。因此,它选择了JOIN BUFFER。
根据文档,只有当连接类型为ALL或index (换句话说,不能使用任何可能的键时),才会使用ALL。
https://stackoverflow.com/questions/20625422
复制相似问题