首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL子查询性能不一致

问MySQL子查询性能不一致
EN

Stack Overflow用户
提问于 2013-04-18 09:26:33
回答 2查看 629关注 0票数 0

G-day

我对以下几点感到困惑。当我运行这个查询时,它需要很长的时间来解决:

代码语言:javascript
复制
Select *
from test
where id in (select id from test2 where customer = 'HARRY');

当我单独运行子查询时,它会在一秒钟内解析为'13454‘。当我将主查询的where语句改为in ('13454')时,它也会立即解析。

有人知道为什么它不能以原始格式运行吗??

干杯,

Rene

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-18 09:29:27

原因是MySQL的一个怪癖。对外部表的每一行执行子查询。

要解决此问题,请使用exists

代码语言:javascript
复制
Select *
from test
where exists (select id from test2 where test2.customer = 'HARRY' and test2.id = test.id);

如果您在test2(customer, id)上有一个索引,这将是最有效的。

我应该补充说,这取决于MySQL的版本(我认为它在5.5中得到了修复)。较老的documentation解释为:

考虑以下子查询比较:

选择输入(SELECT inner_expr FROM ... )其中subquery_where)

MySQL“从外到内”对查询进行求值。也就是说,它首先获取外部表达式outer_expr的值,然后运行子查询并捕获它生成的行。

票数 1
EN

Stack Overflow用户

发布于 2013-04-18 09:27:55

使用JOIN

代码语言:javascript
复制
SELECT  DISTINCT a.*
FROM    Test a
        INNER JOIN Test2 b
            ON a.ID = b.ID
WHERE   b.customer = 'Harry'

为了获得更快的性能,请确保两个表上的ID都安装了KEY。

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

https://stackoverflow.com/questions/16073005

复制
相关文章

相似问题

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