У меня есть система календаря для событий.Каждое событие имеет дату начала и дату окончания.Таким образом, довольно легко узнать, сколько событий активно в определенный день.
Однако составление отчета о событиях, активных каждый день, оказывается сложным за период в 10 лет и почти 200 000 событий.
Запрос, который я пробовал, выглядит следующим образом
select calendar.day, count(*)
from
calendar, events
where
event.startDate <= calendar.day
and event.endDate>= calendar.day
group by day
Таблица календаря содержит 10 календарных дней.У меня есть индексы начала / окончания и дня.
200'000 событий за 10-летний период дают мне> 16 сек.Мне нужно это исправить.
Я не уверен, что это возможно сделать с помощью простой оптимизации запросов.
Очевидное решение, вероятно, состоит в том, чтобы изменять мой код и обновлять предварительно рассчитанную таблицу при каждом добавлении./ обновить / удалить событие.Другие идеи без изменения кода я не знаю.