diff --git a/changelog.d/17728.misc b/changelog.d/17728.misc
new file mode 100644
index 0000000000000000000000000000000000000000..5ab241e9dfad13012667531783a612d7edaa62c3
--- /dev/null
+++ b/changelog.d/17728.misc
@@ -0,0 +1 @@
+Fix `_bulk_get_max_event_pos` being inefficient.
diff --git a/synapse/storage/databases/main/stream.py b/synapse/storage/databases/main/stream.py
index 03b4aa33818216b434e0505760349355855e60d7..0ab7cb8dbd337842de5e67812fd73357ff5cc438 100644
--- a/synapse/storage/databases/main/stream.py
+++ b/synapse/storage/databases/main/stream.py
@@ -1584,7 +1584,7 @@ class StreamWorkerStore(EventsWorkerStore, SQLBaseStore):
                 )
             for room_id, stream_ordering in batch_results.items():
                 if stream_ordering <= now_token.stream:
-                    results.update(batch_results)
+                    results[room_id] = stream_ordering
                 else:
                     recheck_rooms.add(room_id)