D009c93da76fe811115051bf691cc566
2015/11/24 15:55:44 投稿
1

spades sampleの代わりにDBでランダムソート hearts

Before

User.all.sample(3)

After

# 1. orderでRANDOM関数を利用するケース
# mysqlの場合
User.order('RAND()').limit(3)
# sqlite3、postgresqlの場合
User.order('RANDOM()').limit(3)

# 2. idを一度取得した上で再度SQLを発行するケース
# orderでRANDOM関数を利用するケースではデータ量が増加した場合にDBに負荷がかかる
# ランダムにidを取得した後必要なレコードだけを取得したほうが負荷はかからない
ids = User.pluck(:id).sample(3)
User.where(id: ids)

みんなのコメント