首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接表1(外键)到表2(主键)的2列--如何避免连接缓冲区?

连接表1(外键)到表2(主键)的2列--如何避免连接缓冲区?
EN

Stack Overflow用户
提问于 2013-12-17 03:32:31
回答 1查看 172关注 0票数 0
代码语言:javascript
复制
Schema:
CALL (ID,USER_ID(Foreign key),SP_USER_ID(Foreign key))
USER (ID,NAME)

查询1:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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“条件对其他列没有任何影响。

在这种情况下,如何避免连接缓冲区以获得更快的结果,并通过联接或其他方式获得所需的结果?

EN

回答 1

Stack Overflow用户

发布于 2013-12-17 03:53:02

希望USER_ID列上有索引,而SP_USER_ID列上没有索引。因此,它选择了JOIN BUFFER

根据文档,只有当连接类型为ALLindex (换句话说,不能使用任何可能的键时),才会使用ALL

http://dev.mysql.com/doc/internals/en/join-buffer-size.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20625422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档