2016-05-25 6 views
2

RoR 4アプリケーションには、定期的に削除する必要がある何百万ものレコードがあります。現在、削除はbackgoundジョブとして起こる:私は数秒ごとに、それはMySQLサーバのCPU時間をスパイクた回数をやっているので、数百万のレコードをレールで削除する

while fruit.apples.count > 0 
     # create the sql query to delete 1000 feeds from the channel 
     sql = "DELETE FROM apples WHERE fruit_id=#{fruit_id} LIMIT 1000" 
     # execute the sql query 
     ActiveRecord::Base.connection.execute(sql) 
     # wait a bit before the next delete 
     sleep 0.1 
end 

。だから、もしdelete_all/destroy_allを使って100万レコードを削除できるのか、これを達成する良い方法があるのだろうかと思っていました。

答えて

1

DELETEではなくTRUNCATEを使用できます。 TRUNCATEはホールテーブルを削除し、空のテーブルを再作成します。これははるかに高速です。 TRUNCATEはテーブルのAUTO INCREMTフィールドもリセットします

TRUNCATE TABLE yourTable; 
関連する問題