2016-09-07 6 views
0

私はレールアプリケーションを持っていますが、現在はスケール上のパフォーマンス問題に遭遇しています。私はバックエンドにRails 4とMySQLを使用しています。アクティブレコードのパフォーマンスの問題

私はCoachesというモデルを持っています。私は自分の応答をグループ化して、別個の電子メールでコーチを送信するようにしたいと思います。ここで

は一例です:私は私の本番ワークロードでこのコードを使用する場合

Coach.group(:email)

はしかし、それは下記を参照してください、アクティブレコードが結果を生成するためにはるかに時間がかかりすぎます。

Coach Load (193743.7ms) SELECT `coaches`.* FROM `coaches` WHERE `coaches`.`deleted_at` IS NULL GROUP BY `coaches`.`email` 

私はコーチの表の電子メールとdeleted_at列にインデックスを持っています。

誰も過去に同様の問題に遭遇しましたか?

+1

「コーチ」テーブルには、どのくらいのレコードがあるのか​​教えていただけますか? 第2に、コーチのテーブルからの応答で、すべてのコラムが必要ですか? Rails ORMには時間がかかりますので、実際に必要なものだけを選択する必要があります。 –

+0

コーチの表に約60万レコードあります。そして、後でページ分割、ソート、および検索を行うajax-datatables-rails gemのベースとしてこのクエリを使用しています(github.com/antillas21/ajax-datatables-rails)。だから私はこのクエリのすべてのレコードが必要です –

+0

私の推測では、あまりにも多くのユニークな電子メールがあります。あなたは本当にここでグループを使用する必要がありますか?多分あなたは何が必要ですか? –

答えて

0

deleted_atカラムにもindexingを適用する必要があります。また、これらの場合に役立つリミット形式の使用データのようなページ分割を使用することも適切な解決策です。

+0

ありがとう!私は私のdeleted_at列(私は質問を更新)のインデックスを持っています。そして私はページネーションを使うのが好きですが、これはプロセスの後のページネーション(https://github.com/antillas21/ajax-datatables-rails)を処理​​するajax-datatable-rails gemのget_raw_recordsメソッドの中で使用されます。 –

関連する問題