From f5d5939aab38e6c7a2c7a82801b2677d505cf81f Mon Sep 17 00:00:00 2001 From: Steve Perkins Date: Wed, 23 Apr 2025 11:16:45 -0400 Subject: [PATCH] Move my_follows to CTE. Avoid paying join tax twice in subquery. --- api/dbv1/get_tracks.sql.go | 18 ++++++++++++++---- api/dbv1/queries/get_tracks.sql | 18 ++++++++++++++---- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/api/dbv1/get_tracks.sql.go b/api/dbv1/get_tracks.sql.go index f5119e81..c1986b19 100644 --- a/api/dbv1/get_tracks.sql.go +++ b/api/dbv1/get_tracks.sql.go @@ -14,6 +14,18 @@ import ( ) const getTracks = `-- name: GetTracks :many +WITH my_follows AS ( + SELECT + followee_user_id as user_id, + follower_count + FROM follows + JOIN aggregate_user ON followee_user_id = user_id + WHERE $1 > 0 + AND follower_user_id = $1 + AND follows.is_delete = false + ORDER BY follower_count DESC + LIMIT 5000 +) SELECT t.track_id, description, @@ -113,8 +125,7 @@ SELECT FROM ( SELECT user_id, repost_item_id, reposts.created_at FROM reposts - JOIN follows ON followee_user_id = reposts.user_id AND follower_user_id = $1 AND follows.is_delete = false - JOIN aggregate_user USING (user_id) + JOIN my_follows USING (user_id) WHERE repost_item_id = t.track_id AND repost_type = 'track' AND reposts.is_delete = false @@ -135,8 +146,7 @@ SELECT FROM ( SELECT user_id, save_item_id, saves.created_at FROM saves - JOIN follows ON followee_user_id = saves.user_id AND follower_user_id = $1 AND follows.is_delete = false - JOIN aggregate_user USING (user_id) + JOIN my_follows USING (user_id) WHERE save_item_id = t.track_id AND save_type = 'track' AND saves.is_delete = false diff --git a/api/dbv1/queries/get_tracks.sql b/api/dbv1/queries/get_tracks.sql index 0cc3ca88..f74eccb4 100644 --- a/api/dbv1/queries/get_tracks.sql +++ b/api/dbv1/queries/get_tracks.sql @@ -1,4 +1,16 @@ -- name: GetTracks :many +WITH my_follows AS ( + SELECT + followee_user_id as user_id, + follower_count + FROM follows + JOIN aggregate_user ON followee_user_id = user_id + WHERE @my_id > 0 + AND follower_user_id = @my_id + AND follows.is_delete = false + ORDER BY follower_count DESC + LIMIT 5000 +) SELECT t.track_id, description, @@ -98,8 +110,7 @@ SELECT FROM ( SELECT user_id, repost_item_id, reposts.created_at FROM reposts - JOIN follows ON followee_user_id = reposts.user_id AND follower_user_id = @my_id AND follows.is_delete = false - JOIN aggregate_user USING (user_id) + JOIN my_follows USING (user_id) WHERE repost_item_id = t.track_id AND repost_type = 'track' AND reposts.is_delete = false @@ -120,8 +131,7 @@ SELECT FROM ( SELECT user_id, save_item_id, saves.created_at FROM saves - JOIN follows ON followee_user_id = saves.user_id AND follower_user_id = @my_id AND follows.is_delete = false - JOIN aggregate_user USING (user_id) + JOIN my_follows USING (user_id) WHERE save_item_id = t.track_id AND save_type = 'track' AND saves.is_delete = false