私は、ユーザが50kレコード以上、ノートが90kレコード以上の2つのテーブルusers
とnotes
を持っています。私は私ができるの両方のテーブルのデータを持つことができる一時テーブルtemp_user_notes
を作成しようとしていますRailsの巨大なテーブルからすべての行を効率的に取得する方法は?
id user_id created_at category impact_score
:
users_tableのclass User < ActiveRecord::Base
has_many :notes
end
スキーマ:notes_tableの
id email created_at
スキーマActiveRecordクエリを実行してデータを取得します。
user_notes_tableのスキーマ:
id user_id notes_id email user_created_at notes_created_at category impact_score
私はすべての使用とそのノートをループこの
def self.populate_temp_user_notes
users = User.all
users.each do |user|
user.notes.each do |note|
user_notes = TempUserNote.new
user_notes.user_id = user.id
user_notes.notes_id = note.id
user_notes.auth_token_created_at = user.auth_token_created_at
user_notes.notes_recorded_at = note.recorded_at
user_notes.category = note.category
user_notes.well_being_score = note.perception_score
user_notes.save
end
end
end
をしていますが、私は他にどのようなアプローチを使用することができ、プロセスを食べて非常に長いメモリのですか?ここから
EDIT: -
私の要件は次のとおりです。ユーザー、ノート、トランザクション、サブスクリプション:私はfolowingテーブルの使用を取るANDやOR条件で区切られた一連のクエリを持っています。ターゲットユーザを取得するクエリが(Query1 OR Query2) AND Query3 AND Query4
であると仮定した場合、各クエリの出力は次のクエリの入力となります。
例えば:私は私のターゲットユーザーを持っており、そこにノートの最後のユーザリストで
total users in DB = 1000
1. user_list = (Query1 or Query2) #=> 500 users
2. taking 500 users from user_list as input for next query
3. user_list = user_list AND Query3 #=> 300 users
4. taking 300 users from point 3 as input for query in point 4
5. user_list = user_list AND Query4 #=> 50 users
。
私は@BoraMaがジョインを使用することが効率的な方法であることに同意しますが、これを行うことは私の目的を解決しません。 私の要件は次のとおりです。ANDとOR条件で一連のクエリを分離しています。例:最後のユーザーのリストで 1. user_list =(Query1をまたはQUERY2) 2.入力 3. user_list = user_listとしてuser_list取ってQuery3 4. user_list = user_list(fulfillig条件3)AND Query4 私は私を持っていますターゲットユーザーとノートがあります。 – Prem