2012-03-29 2 views
0

大きなテーブルからの選択の最適化:私は約40万行を持つテーブルがある、と私はこのような何かを実行したい

SELECT country, count(*) FROM `signups` 
where `signed_up` > '2012-03-20 00:00:00' 
group by country 

基本的には特定の日付の後に国ごとにどのように多くのサインアップを取得するには(通常の先週は)。 1日あたり約400,000件の申し込みがあり、合計で約4,000万件があります。

最後の1週間はクエリが実行されないため、「MySQLサーバーがなくなった」というメッセージが表示されます...これを最適化する方法はありますか?

+2

「国」にはどのようなインデックスがありますか? –

+0

1つのインデックス、signup_idである主キー – luqita

+0

** EXPLAIN ** SELECT ...コマンドを使用して、DBがクエリにどのように応答するかを確認します。このフィールドで検索してからsigned_upのインデックスも害を受けることはありません。 – luukes

答えて

2

以下のクエリを使用して、signed_up列にインデックスを追加してください。あなたは確かにパフォーマンスを得るでしょう。国別signed_up> '2012-03-20午後12時00分○○秒' グループは

よろしく、 Alok

1

カウントは*ヒットがあるsignups FROM

SELECT国、カウント数(signup_id)パフォーマンスに。可能であれば、何もしないほうがよいでしょう。 DBエンジンがより多くの作業をするだけで、クエリが遅くなります。

Alokが正しい場合、一般的に検索する列にインデックスを追加すると、クエリ実行時にハッシュテーブルが既に作成されます。さもなければ、実際に結果を得る前にエンジンは結果のハッシュテーブルを作成する必要があります。インデックスはこれを手作業で行います。

関連する問題