From fc5aec7de08ee80de249b17ea07f59f41cabf59e Mon Sep 17 00:00:00 2001 From: evazion Date: Fri, 18 Feb 2022 04:24:33 -0600 Subject: [PATCH] media assets: optimize /media_assets?search[is_posted] query. Followup to 093a808a3. Using a NOT EXISTS clause is much faster than the `LEFT OUTER JOIN posts WHERE posts.id IS NULL` clause generated by `.where.missing(:post)`. --- app/models/media_asset.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/models/media_asset.rb b/app/models/media_asset.rb index a9105e29c..8f223eb95 100644 --- a/app/models/media_asset.rb +++ b/app/models/media_asset.rb @@ -189,9 +189,11 @@ class MediaAsset < ApplicationRecord end if params[:is_posted].to_s.truthy? - q = q.where.associated(:post) + #q = q.where.associated(:post) + q = q.where(Post.where("posts.md5 = media_assets.md5").arel.exists) elsif params[:is_posted].to_s.falsy? - q = q.where.missing(:post) + #q = q.where.missing(:post) + q = q.where.not(Post.where("posts.md5 = media_assets.md5").arel.exists) end q.apply_default_order(params)