Optimize/coerce query to use correct indices

initial_sync_perf
Erik Johnston 2015-03-09 15:16:25 +00:00
parent d5174065af
commit a8dbb624b3
1 changed files with 12 additions and 4 deletions

View File

@ -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: