繁体   English   中英

MySQL子查询导致服务器挂起

[英]MySQL Subquery Causing Server to Hang

我正在尝试执行以下查询

SELECT * FROM person 
         WHERE id IN 
             ( SELECT user_id FROM participation 
                    WHERE activity_id = '1' AND application_id = '1' 
             )

外部查询返回大约4000个响应,而内部查询返回29。当在我的Web服务器上执行时,什么也没发生,当我在本地对其进行测试时,mysql最终使用100%CPU,但仍然没有任何反应。 大小可能是原因吗?

具体来说,这会导致服务器永远挂起,我相当确定运行查询的Web服务器由于崩溃而死机了。

您为什么不为此查询使用内部联接? 我认为那会更快(更容易阅读)-也许它可以解决您的问题(但我找不到您的查询失败)。

编辑:内部联接解决方案看起来像这样:

SELECT
  person.*
FROM
  person
INNER JOIN
  participation
ON
  person.id = participation.user_id
WHERE
  participation.activity_id = '1'
AND
  participation.application_id = '1'

participation表中有几行,那里有什么索引? 在(user_id,activity_id,application_id)上使用多列索引可能会有所帮助。

重新评论:IN并不慢。 如果IN中的子查询与外部查询相关联,则它们可能会变慢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM