From b013b294e2194cd3305d16b25afb3cc3e62d043d Mon Sep 17 00:00:00 2001 From: kolaente Date: Mon, 28 Oct 2024 15:58:07 +0100 Subject: [PATCH] fix(projects): remove unnecessary join The removal of the unnecessary join condition speeds up the query 10x. Before, it would take ~700ms on Vikunja Cloud. With this removal, the otherwise same query now takes ~70ms (which still leaves plenty of room for improvements, but it's already a great step forwards). --- pkg/models/project.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/models/project.go b/pkg/models/project.go index f729d1475..4caf4406b 100644 --- a/pkg/models/project.go +++ b/pkg/models/project.go @@ -519,7 +519,7 @@ INNER JOIN all_projects ap ON p.parent_project_id = ap.id` "all_projects.identifier", "all_projects.hex_color", "all_projects.owner_id", - "CASE WHEN np.id IS NULL THEN 0 ELSE all_projects.parent_project_id END AS parent_project_id", + "all_projects.parent_project_id", "all_projects.is_archived", "all_projects.background_file_id", "all_projects.background_blur_hash", @@ -530,7 +530,6 @@ INNER JOIN all_projects ap ON p.parent_project_id = ap.id` currentProjects := []*Project{} err = s.SQL(`WITH RECURSIVE all_projects as (`+baseQuery+`) SELECT DISTINCT `+columnStr+` FROM all_projects - LEFT JOIN all_projects np on all_projects.parent_project_id = np.id ORDER BY all_projects.position `+limitSQL, args...).Find(¤tProjects) if err != nil { return