Schema:
CALL (ID,USER_ID(Foreign key),SP_USER_ID(Foreign key))
USER (ID,NAME)
查询1:从表1(外键)到表2(主键)加入2列 - 如何避免JOIN BUFFER?
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客户端崩溃(看到解释计划,它显示了一个USER表中的“JOIN BUFFER”)。
“where”SP_USER_ID或USER_ID的条件有些快速给出结果,但它不在可接受的范围内。“其中”其他列上的条件没有任何影响。
如何避免JOIN BUFFER在这种情况下获得更快的结果并通过连接或其他方式获得期望的结果?
你有三张桌子还是两张桌子?你有另一张Super_User的桌子吗? –
。只有2个表 - CALL和USER.USER表具有所有用户信息.CALL中的USER_ID与客户ID相同,而CALL中的SP_USER_ID与正在服务/参与该客户的个人ID相同。现在,我需要与USER表联合以获取USER_ID和SP_USER_ID的名称。 – user104309