Ответ 1
Используйте DAYOFWEEK в вашем запросе, например:
SELECT * FROM mytable WHERE MONTH(event_date) = 5 AND DAYOFWEEK(event_date) = 7;
Здесь вы найдете всю информацию по субботам в мае.
Чтобы получить самые быстрые чтения, храните денормализованное поле, которое является днем недели (и все, что вам нужно). Таким образом, вы можете индексировать столбцы и избегать полного сканирования таблицы.
Просто попробуйте выше, чтобы узнать, подходит ли оно вашим потребностям, а если нет, добавьте дополнительные столбцы и сохраните данные при записи. Просто следите за аномалиями обновления (убедитесь, что вы обновили столбец day_of_week, если вы изменили event_date).
Обратите внимание, что денормализованные поля увеличивают время, затрачиваемое на запись, увеличивают расчеты при записи и занимают больше места. Убедитесь, что вам действительно нужна польза, и можете измерить, что она вам помогает.