summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2015-03-09 15:16:25 +0000
committerErik Johnston <erik@matrix.org>2015-03-09 15:16:25 +0000
commita8dbb624b3fb991e520e0af909a200c3f4bc53f7 (patch)
tree0661aad63ca938e63f5ca1c956423387be12a47e
parentMerge branch 'release-v0.8.0' of github.com:matrix-org/synapse (diff)
downloadsynapse-initial_sync_perf.tar.xz
Optimize/coerce query to use correct indices github/initial_sync_perf initial_sync_perf
-rw-r--r--synapse/storage/stream.py16
1 files changed, 12 insertions, 4 deletions
diff --git a/synapse/storage/stream.py b/synapse/storage/stream.py

index 09bc522210..e320da1524 100644 --- a/synapse/storage/stream.py +++ b/synapse/storage/stream.py
@@ -358,7 +358,7 @@ class StreamStore(SQLBaseStore): sql = ( "SELECT stream_ordering, topological_ordering, event_id" " FROM events" - " WHERE room_id = ? AND stream_ordering <= ? AND outlier = 0" + " WHERE room_id = ? AND outlier = 0" " ORDER BY topological_ordering DESC, stream_ordering DESC" " LIMIT ?" ) @@ -368,21 +368,29 @@ class StreamStore(SQLBaseStore): "SELECT stream_ordering, topological_ordering, event_id" " FROM events" " WHERE room_id = ? AND stream_ordering > ?" - " AND stream_ordering <= ? AND outlier = 0" + " AND outlier = 0" " ORDER BY topological_ordering DESC, stream_ordering DESC" " LIMIT ?" ) def get_recent_events_for_room_txn(txn): if from_token is None: - txn.execute(sql, (room_id, end_token.stream, limit,)) + txn.execute(sql, (room_id, limit*2,)) else: txn.execute(sql, ( - room_id, from_token.stream, end_token.stream, limit + room_id, from_token.stream, limit*2 )) rows = self.cursor_to_dict(txn) + rows[:] = [ + r + for r in rows + if r["stream_ordering"] <= end_token.stream + ] + + rows[:] = rows[:int(limit)] + rows.reverse() # As we selected with reverse ordering if rows: