From 4f901cae8f7d35834b52af46984343164eaed515 Mon Sep 17 00:00:00 2001 From: Penar Musaraj <pmusaraj@gmail.com> Date: Mon, 22 Jan 2024 18:33:39 +0100 Subject: [PATCH] PERF: Better query performance for user avatar consistency check. (#25342) --- app/models/user_avatar.rb | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/models/user_avatar.rb b/app/models/user_avatar.rb index 9b6df23fc65..fbf191b454e 100644 --- a/app/models/user_avatar.rb +++ b/app/models/user_avatar.rb @@ -178,10 +178,14 @@ class UserAvatar < ActiveRecord::Base ids = DB.query_single(<<~SQL, sizes: Discourse.avatar_sizes, limit: max_optimized_avatars_to_remove) - SELECT oi.id FROM user_avatars a + SELECT oi.id FROM ( + SELECT custom_upload_id FROM user_avatars + EXCEPT + SELECT upload_id FROM upload_references WHERE target_type <> 'UserAvatar' + AND upload_id IS NOT NULL + ) AS a JOIN optimized_images oi ON oi.upload_id = a.custom_upload_id - LEFT JOIN upload_references ur ON ur.upload_id = a.custom_upload_id and ur.target_type <> 'UserAvatar' - WHERE oi.width not in (:sizes) AND oi.height not in (:sizes) AND ur.upload_id IS NULL + WHERE oi.width not in (:sizes) AND oi.height not in (:sizes) LIMIT :limit SQL