From 9c7014f85322857a6b30cae36be24e73494d593c Mon Sep 17 00:00:00 2001 From: Seth Call Date: Sun, 27 Dec 2020 23:44:17 -0600 Subject: [PATCH] optimize slow rsvp query --- db/up/find_sessions_2020.sql | 9 ++++++++- ruby/lib/jam_ruby/models/music_session.rb | 12 ++---------- ruby/spec/factories.rb | 4 ++-- ruby/spec/jam_ruby/models/music_session_spec.rb | 6 +++--- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/db/up/find_sessions_2020.sql b/db/up/find_sessions_2020.sql index 2cc011f1c..0785873b7 100644 --- a/db/up/find_sessions_2020.sql +++ b/db/up/find_sessions_2020.sql @@ -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); -ALTER TABLE generic_state ADD COLUMN connection_policy VARCHAR; \ No newline at end of file +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); diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb index af5841bca..cc6c34ff4 100644 --- a/ruby/lib/jam_ruby/models/music_session.rb +++ b/ruby/lib/jam_ruby/models/music_session.rb @@ -580,17 +580,9 @@ module JamRuby query = MusicSession.select('distinct music_sessions.*') query = query.joins( %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 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 invitations @@ -602,7 +594,7 @@ module JamRuby 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.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') diff --git a/ruby/spec/factories.rb b/ruby/spec/factories.rb index 04a60c6a6..5d7c0175f 100644 --- a/ruby/spec/factories.rb +++ b/ruby/spec/factories.rb @@ -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) factory :rsvp_request_for_multiple_slots do transient do - music_session nil + #music_session nil number 1 - chosen nil + #chosen nil end after(:create) { |rsvp_request, evaluator| diff --git a/ruby/spec/jam_ruby/models/music_session_spec.rb b/ruby/spec/jam_ruby/models/music_session_spec.rb index 464e93c9b..93f520071 100644 --- a/ruby/spec/jam_ruby/models/music_session_spec.rb +++ b/ruby/spec/jam_ruby/models/music_session_spec.rb @@ -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") 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(false).should == 'Thursday, July 10 - 10:00pm' + music_session.pretty_scheduled_start(false).should == 'Thursday, July 10 - 11:00pm' end it "displays default correctly" do @@ -377,7 +377,7 @@ describe MusicSession do approved_rsvps.length.should == 2 - sessions = MusicSession.scheduled(approved_rsvps[0]) + sessions = MusicSession.scheduled(User.find(approved_rsvps[0].id)) sessions.each do |session| puts session.name puts session.description @@ -385,7 +385,7 @@ describe MusicSession do sessions.length.should == 1 - sessions = MusicSession.scheduled(approved_rsvps[1]) + sessions = MusicSession.scheduled(User.find(approved_rsvps[1].id)) sessions.length.should == 1 end