mirror of
https://github.com/element-hq/synapse.git
synced 2024-12-14 11:57:44 +00:00
Speed up e2e device keys queries for bot accounts (#16841)
This helps with bot accounts with lots of non-e2e devices. The change is basically to change the order of the join for the case of using `INNER JOIN`
This commit is contained in:
parent
23740eaa3d
commit
c925b45567
2 changed files with 19 additions and 11 deletions
1
changelog.d/16841.misc
Normal file
1
changelog.d/16841.misc
Normal file
|
@ -0,0 +1 @@
|
|||
Speed up e2e device keys queries for bot accounts.
|
|
@ -408,17 +408,24 @@ class EndToEndKeyWorkerStore(EndToEndKeyBackgroundStore, CacheInvalidationWorker
|
|||
def get_e2e_device_keys_txn(
|
||||
txn: LoggingTransaction, query_clause: str, query_params: list
|
||||
) -> None:
|
||||
sql = (
|
||||
"SELECT user_id, device_id, "
|
||||
" d.display_name, "
|
||||
" k.key_json"
|
||||
" FROM devices d"
|
||||
" %s JOIN e2e_device_keys_json k USING (user_id, device_id)"
|
||||
" WHERE %s AND NOT d.hidden"
|
||||
) % (
|
||||
"LEFT" if include_all_devices else "INNER",
|
||||
query_clause,
|
||||
)
|
||||
if include_all_devices:
|
||||
sql = f"""
|
||||
SELECT user_id, device_id, d.display_name, k.key_json
|
||||
FROM devices d
|
||||
LEFT JOIN e2e_device_keys_json k USING (user_id, device_id)
|
||||
WHERE {query_clause} AND NOT d.hidden
|
||||
"""
|
||||
else:
|
||||
# We swap around `e2e_device_keys_json` and `devices`, as we
|
||||
# want Postgres to query `e2e_device_keys_json` first as it will
|
||||
# have fewer rows in it. This helps *a lot* with accounts with
|
||||
# lots of non-e2e devices (such as bots).
|
||||
sql = f"""
|
||||
SELECT user_id, device_id, d.display_name, k.key_json
|
||||
FROM e2e_device_keys_json k
|
||||
INNER JOIN devices d USING (user_id, device_id)
|
||||
WHERE {query_clause} AND NOT d.hidden
|
||||
"""
|
||||
|
||||
txn.execute(sql, query_params)
|
||||
|
||||
|
|
Loading…
Reference in a new issue