diff --git a/db/migrate/20230215074425_move_emoji_reaction_settings.rb b/db/migrate/20230215074425_move_emoji_reaction_settings.rb
index 9b9a65e046..420772b692 100644
--- a/db/migrate/20230215074425_move_emoji_reaction_settings.rb
+++ b/db/migrate/20230215074425_move_emoji_reaction_settings.rb
@@ -20,29 +20,30 @@ class MoveEmojiReactionSettings < ActiveRecord::Migration[6.1]
   end
 
   def up
-    User.find_each do |user|
-      previous_settings = LegacySetting.where(thing_type: 'User', thing_id: user.id).index_by(&:var)
+    User.find_in_batches do |users|
+      previous_settings_for_batch = LegacySetting.where(thing_type: 'User', thing_id: users.map(&:id)).group_by(&:thing_id)
 
-      user_settings = Oj.load(user.settings || '{}')
-      user_settings.delete('theme')
+      users.each do |user|
+        previous_settings = previous_settings_for_batch[user.id]&.index_by(&:var) || {}
+        user_settings = Oj.load(user.settings || '{}')
+        user_settings.delete('theme')
 
-      MAPPING.each do |legacy_key, new_key|
-        value = previous_settings[legacy_key]&.value
+        MAPPING.each do |legacy_key, new_key|
+          value = previous_settings[legacy_key]&.value
 
-        next if value.blank?
+          next if value.blank?
 
-        if value.is_a?(Hash)
-          value.each do |nested_key, nested_value|
-            user_settings[MAPPING[legacy_key][nested_key.to_sym]] = nested_value
+          if value.is_a?(Hash)
+            value.each do |nested_key, nested_value|
+              user_settings[MAPPING[legacy_key][nested_key.to_sym]] = nested_value
+            end
+          else
+            user_settings[new_key] = value
           end
-        else
-          user_settings[new_key] = value
         end
-      end
 
-      user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations
+        user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations
+      end
     end
   end
-
-  def down; end
 end