From a0f07fb076bdae4d2f41032994d12b3a8f519c87 Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Tue, 23 Sep 2025 13:30:44 +0100 Subject: [PATCH] appview/db: improve repo-languages query Change-Id: nsvvvozpvzmvxopszpwsmwypukznvrqw switch from corelated query to window function. practically, this gives us a 10x speedup for this portion of the function. we can go further by running each subquery for GetRepos concurrently, but the potential wins here is in the order of ~2ms. Signed-off-by: oppiliappan --- appview/db/repos.go | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/appview/db/repos.go b/appview/db/repos.go index 52ce305f..b8a25284 100644 --- a/appview/db/repos.go +++ b/appview/db/repos.go @@ -131,21 +131,20 @@ func GetRepos(e Execer, limit int, filters ...filter) ([]models.Repo, error) { languageQuery := fmt.Sprintf( ` - select - repo_at, language - from - repo_languages r1 - where - repo_at IN (%s) + select repo_at, language + from ( + select + repo_at, + language, + row_number() over ( + partition by repo_at + order by bytes desc + ) as rn + from repo_languages + where repo_at in (%s) and is_default_ref = 1 - and id = ( - select id - from repo_languages r2 - where r2.repo_at = r1.repo_at - and r2.is_default_ref = 1 - order by bytes desc - limit 1 - ); + ) + where rn = 1 `, inClause, ) -- 2.43.0