2012-01-13 8 views
1

私はこれが原因でサーバーがタイムアウトするのはなぜですか?

SELECT id, max(event_date) dt 
FROM worker 
LEFT JOIN events ON id = attendee 
WHERE worker.type='CON' 
GROUP BY id; 

を実行しようとしているが、クエリは非常に時間がかかりすぎます。これをより速くする方法はありますか?

およびeventsは、多少大きな(10,000レコード)テーブルが1対多に結合されています。 (ほとんどの労働者には関連するイベントは0件ありますが、10件程度のものがあります)。しかし、これは大変で、クエリが失敗するとは思わないでしょう。アイデア?

+1

実行実行計画を説明し、表示します。 events.attendeeにインデックスがあることを確認してください。 idが主キーであると仮定すると、worker.typeにインデックスがあることを確認してください –

答えて

0

正確なテーブルスキーマを転記すると、より良い分析が可能になります。

私は出席者を推測しており、タイプはインデックスに登録されていません。

実行計画の詳細については、クエリの先頭に「explain」(http://dev.mysql.com/doc/refman/5.1/en/explain-output.htmlを参照)を付けてください。

0

スキーマがなければ、これは推測に強制されます。しかし、eventsテーブルにはidフィールドとattendeeフィールドの両方がありますか?

クエリのヘルプにもっと明示的に表示されていますか?

SELECT worker.id, max(events.event_date) dt 
FROM worker 
LEFT JOIN events ON worker.id = events.attendee 
WHERE worker.type='CON' 
GROUP BY worker.id; 

(私がどのテーブルの各フィールドの仲間を想定しなければならなかった。)

関連する問題