[英]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.