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