Use a query that postgresql optimises better for get_events_around

pull/906/head
Mark Haines 2016-07-04 15:48:25 +01:00
parent 1238203bc4
commit f18d7546c6
1 changed files with 16 additions and 12 deletions

View File

@ -591,25 +591,28 @@ class StreamStore(SQLBaseStore):
query_before = (
"SELECT topological_ordering, stream_ordering, event_id FROM events"
" WHERE room_id = ? AND (topological_ordering < ?"
" OR (topological_ordering = ? AND stream_ordering < ?))"
" ORDER BY topological_ordering DESC, stream_ordering DESC"
" LIMIT ?"
" WHERE room_id = ? AND topological_ordering < ?"
" UNION ALL "
" SELECT topological_ordering, stream_ordering, event_id FROM events"
" WHERE room_id = ? AND topological_ordering = ? AND stream_ordering < ?"
" ORDER BY topological_ordering DESC, stream_ordering DESC LIMIT ?"
)
query_after = (
"SELECT topological_ordering, stream_ordering, event_id FROM events"
" WHERE room_id = ? AND (topological_ordering > ?"
" OR (topological_ordering = ? AND stream_ordering > ?))"
" ORDER BY topological_ordering ASC, stream_ordering ASC"
" LIMIT ?"
" WHERE room_id = ? AND topological_ordering > ?"
" UNION ALL"
" SELECT topological_ordering, stream_ordering, event_id FROM events"
" WHERE room_id = ? AND topological_ordering = ? AND stream_ordering > ?"
" ORDER BY topological_ordering ASC, stream_ordering ASC LIMIT ?"
)
txn.execute(
query_before,
(
room_id, topological_ordering, topological_ordering,
stream_ordering, before_limit,
room_id, topological_ordering,
room_id, topological_ordering, stream_ordering,
before_limit,
)
)
@ -630,8 +633,9 @@ class StreamStore(SQLBaseStore):
txn.execute(
query_after,
(
room_id, topological_ordering, topological_ordering,
stream_ordering, after_limit,
room_id, topological_ordering,
room_id, topological_ordering, stream_ordering,
after_limit,
)
)