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 に答える