diff options
author | 2024-06-30 19:27:40 +0100 | |
---|---|---|
committer | 2024-06-30 19:34:48 +0100 | |
commit | f69fb12e122f01a826ca661ab8402fa4f48d2a33 (patch) | |
tree | c107864ca6cf04d1c5e027d14fedea521a481474 | |
parent | Improve user in-guild sync process (diff) |
Improve user in_guild sync query time by only loading the id column
This means the other, larger, columns do not need to be deserialised, bringing the query time down from 7.4s down to 3.5s.
I couldn't simply do select(models.User.id) here, as we need the full User object in order to mutate and update it later inthe process.
-rw-r--r-- | metricity/exts/event_listeners/startup_sync.py | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/metricity/exts/event_listeners/startup_sync.py b/metricity/exts/event_listeners/startup_sync.py index 017ea1f..554f952 100644 --- a/metricity/exts/event_listeners/startup_sync.py +++ b/metricity/exts/event_listeners/startup_sync.py @@ -7,6 +7,7 @@ from discord.ext import commands from pydis_core.utils import logging, scheduling from sqlalchemy import column, select from sqlalchemy.dialects.postgresql import insert +from sqlalchemy.orm import load_only from metricity import models from metricity.bot import Bot @@ -95,7 +96,9 @@ class StartupSyncer(commands.Cog): users_updated = 0 guild_member_ids = {str(member.id) for member in guild.members} async with async_session() as sess: - res = await sess.execute(select(models.User).filter_by(in_guild=True)) + + stmt = select(models.User).filter_by(in_guild=True).options(load_only(models.User.id)) + res = await sess.execute(stmt) in_guild_users = res.scalars() for user in in_guild_users: if user.id not in guild_member_ids: |