1

我正在尝试执行以下查询

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 服务器正处于崩溃的过程中(呜呜)。

4

2 回答 2

2

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

编辑:内部连接解决方​​案如下所示:

SELECT
  person.*
FROM
  person
INNER JOIN
  participation
ON
  person.id = participation.user_id
WHERE
  participation.activity_id = '1'
AND
  participation.application_id = '1'
于 2010-07-26T12:25:36.337 回答
1

表中有多少行,有participation哪些索引?(user_id, activity_id, application_id) 上的多列索引可以在这里提供帮助。

回复评论:IN 并不慢。如果 IN 中的子查询与外部查询相关,它们可能会很慢。

于 2010-07-26T14:08:38.513 回答