optimize slow rsvp query

This commit is contained in:
Seth Call 2020-12-27 23:44:17 -06:00
parent 965d224a0e
commit 9c7014f853
4 changed files with 15 additions and 16 deletions

View File

@ -144,4 +144,11 @@ CREATE INDEX msuh_created_at ON music_sessions_user_history USING btree (created
CREATE INDEX bands_musicians_user_id_idx ON bands_musicians USING btree (user_id); CREATE INDEX bands_musicians_user_id_idx ON bands_musicians USING btree (user_id);
ALTER TABLE generic_state ADD COLUMN connection_policy VARCHAR; ALTER TABLE generic_state ADD COLUMN connection_policy VARCHAR;
-- user syncs
CREATE INDEX recorded_tracks_user_id_idx ON recorded_tracks USING btree (user_id);
CREATE INDEX recorded_tracks_recording_id_idx ON recorded_tracks USING btree (recording_id);
CREATE INDEX recorded_backing_tracks_user_id_idx ON recorded_backing_tracks USING btree (user_id);
CREATE INDEX recorded_backing_tracks_recording_id_idx ON recorded_backing_tracks USING btree (recording_id);
CREATE INDEX mixes_recording_id_idx ON mixes USING btree (recording_id);

View File

@ -580,17 +580,9 @@ module JamRuby
query = MusicSession.select('distinct music_sessions.*') query = MusicSession.select('distinct music_sessions.*')
query = query.joins( query = query.joins(
%Q{ %Q{
LEFT OUTER JOIN
rsvp_slots
ON
music_sessions.id = rsvp_slots.music_session_id
LEFT OUTER JOIN
rsvp_requests_rsvp_slots
ON
rsvp_requests_rsvp_slots.rsvp_slot_id = rsvp_slots.id
LEFT OUTER JOIN LEFT OUTER JOIN
rsvp_requests rsvp_requests
ON rsvp_requests.id = rsvp_requests_rsvp_slots.rsvp_request_id ON rsvp_requests.music_session_id = music_sessions.id AND rsvp_requests.user_id = '#{user.id}' AND rsvp_requests.chosen = TRUE
LEFT OUTER JOIN LEFT OUTER JOIN
invitations invitations
@ -602,7 +594,7 @@ module JamRuby
query = query.where("music_sessions.canceled = FALSE") query = query.where("music_sessions.canceled = FALSE")
query = query.where('music_sessions.fan_access = TRUE or music_sessions.musician_access = TRUE') if only_public query = query.where('music_sessions.fan_access = TRUE or music_sessions.musician_access = TRUE') if only_public
#query = query.where("music_sessions.user_id = '#{user.id}' OR invitations.id IS NOT NULL") #query = query.where("music_sessions.user_id = '#{user.id}' OR invitations.id IS NOT NULL")
query = query.where("(rsvp_requests.id IS NOT NULL AND rsvp_requests_rsvp_slots.id IS NOT NULL AND rsvp_requests.user_id = '#{user.id}' AND rsvp_requests_rsvp_slots.chosen = true) OR (invitations.id IS NOT NULL) OR (music_sessions.user_id = '#{user.id}') ") query = query.where("(rsvp_requests.id IS NOT NULL) OR (invitations.id IS NOT NULL) OR (music_sessions.user_id = '#{user.id}') ")
query = Search.scope_schools_together_sessions(query, user, 'music_sessions') query = Search.scope_schools_together_sessions(query, user, 'music_sessions')

View File

@ -690,9 +690,9 @@ FactoryGirl.define do
# creates *number* slots for a new rsvp_request (the case were you are too lazy / don't care to set up slots) # creates *number* slots for a new rsvp_request (the case were you are too lazy / don't care to set up slots)
factory :rsvp_request_for_multiple_slots do factory :rsvp_request_for_multiple_slots do
transient do transient do
music_session nil #music_session nil
number 1 number 1
chosen nil #chosen nil
end end
after(:create) { |rsvp_request, evaluator| after(:create) { |rsvp_request, evaluator|

View File

@ -105,7 +105,7 @@ describe MusicSession do
time = MusicSession.parse_scheduled_start("Thu Jul 10 2014 10:00 PM", "Central Time (US & Canada),America/Chicago") time = MusicSession.parse_scheduled_start("Thu Jul 10 2014 10:00 PM", "Central Time (US & Canada),America/Chicago")
music_session = FactoryGirl.create(:music_session, scheduled_start: time, timezone: "Central Time (US & Canada),America/Chicago") music_session = FactoryGirl.create(:music_session, scheduled_start: time, timezone: "Central Time (US & Canada),America/Chicago")
music_session.pretty_scheduled_start(true).should == 'Thursday, July 10, 10:00-11:00 PM US Central Time' music_session.pretty_scheduled_start(true).should == 'Thursday, July 10, 10:00-11:00 PM US Central Time'
music_session.pretty_scheduled_start(false).should == 'Thursday, July 10 - 10:00pm' music_session.pretty_scheduled_start(false).should == 'Thursday, July 10 - 11:00pm'
end end
it "displays default correctly" do it "displays default correctly" do
@ -377,7 +377,7 @@ describe MusicSession do
approved_rsvps.length.should == 2 approved_rsvps.length.should == 2
sessions = MusicSession.scheduled(approved_rsvps[0]) sessions = MusicSession.scheduled(User.find(approved_rsvps[0].id))
sessions.each do |session| sessions.each do |session|
puts session.name puts session.name
puts session.description puts session.description
@ -385,7 +385,7 @@ describe MusicSession do
sessions.length.should == 1 sessions.length.should == 1
sessions = MusicSession.scheduled(approved_rsvps[1]) sessions = MusicSession.scheduled(User.find(approved_rsvps[1].id))
sessions.length.should == 1 sessions.length.should == 1
end end