From 7e3a0cc16ed5cba15dae06bee7a229f054fea3bf Mon Sep 17 00:00:00 2001 From: Olivier Desenfans Date: Sat, 25 Oct 2025 00:15:28 +0200 Subject: [PATCH] fix: avoid ORDER BY in count subqueries ORDER BY clauses in subqueries are not optimized away, resulting in degraded query plans. Fixed the issue by enforcing no ordering when building the subquery for counting matching messages. This does not fix all performance issues but should still result in a ~30% performance improvement on slow queries. --- src/aleph/db/accessors/messages.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/aleph/db/accessors/messages.py b/src/aleph/db/accessors/messages.py index 1bc6f37d5..0eb667510 100644 --- a/src/aleph/db/accessors/messages.py +++ b/src/aleph/db/accessors/messages.py @@ -73,8 +73,8 @@ def make_matching_messages_query( content_types: Optional[Sequence[str]] = None, tags: Optional[Sequence[str]] = None, channels: Optional[Sequence[str]] = None, - sort_by: SortBy = SortBy.TIME, - sort_order: SortOrder = SortOrder.DESCENDING, + sort_by: Optional[SortBy] = SortBy.TIME, + sort_order: Optional[SortOrder] = SortOrder.DESCENDING, page: int = 1, pagination: int = 20, include_confirmations: bool = False, @@ -184,7 +184,7 @@ def make_matching_messages_query( MessageDb.item_hash.asc(), ) ) - else: + elif sort_by == SortBy.TIME: if sort_order == SortOrder.DESCENDING: order_by_columns = ( MessageDb.time.desc(), @@ -228,6 +228,8 @@ def count_matching_messages( include_confirmations=False, page=1, pagination=0, + sort_by=None, + sort_order=None, ).subquery() select_count_stmt = select(func.count()).select_from(select_stmt) return session.execute(select_count_stmt).scalar_one()