2016-09-07 53 views
0

我有一個rails應用程序,目前我遇到性能問題的規模。我使用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

你能告訴我在「教練」表中有多少記錄嗎? 其次,你是否需要所有列的'教練'表的迴應? Rails ORM需要很多時間,所以如果有很多列,那麼你只需要選擇那些你實際需要的那些。 –

+0

我在教練表中有大約600,000條記錄。我使用這個查詢作爲ajax-datatables-rails gem的基礎,後者提供分頁,排序和搜索(github.com/antillas21/ajax-datatables-rails)。所以我確實需要這個查詢中的所有記錄 –

+0

我的猜測是有太多獨特的電子郵件。你真的需要在這裏使用組嗎?也許截然不同的是你需要的。 –

回答

0

您還需要在deleted_at列上應用indexing列,還有一個合適的解決方案是使用分頁,比如使用限制格式的數據,這將有助於您在這些情況下。

+0

感謝您的迴應!我有我的deleted_at列索引(所以我更新了問題)。我喜歡使用分頁的想法,但是這是在ajax-datatable-rails gem的get_raw_records方法中使用的,後者在該進程中稍後處理分頁(https://github.com/antillas21/ajax-datatables-rails) –