Użyj DAYOFWEEK w zapytaniu coś takiego:
SELECT * FROM mytable WHERE MONTH(event_date) = 5 AND DAYOFWEEK(event_date) = 7;
Znajdziesz tu wszystkie informacje na soboty w maju.
Aby uzyskać najszybsze odczyty przechowuj zdenormalizowane pole, które jest dniem tygodnia (i cokolwiek innego, czego potrzebujesz). W ten sposób możesz indeksować kolumny i unikać pełnego skanowania tabel.
Po prostu wypróbuj powyższe, aby sprawdzić, czy odpowiada Twoim potrzebom, a jeśli nie, dodaj kilka dodatkowych kolumn i przechowuj dane podczas zapisu. Po prostu uważaj na anomalie aktualizacji (upewnij się, że aktualizujesz kolumnę day_of_week, jeśli zmienisz event_date).
Zwróć uwagę, że zdenormalizowane pola wydłużą czas wykonywania zapisów, zwiększą liczbę obliczeń przy zapisie i zajmą więcej miejsca. Upewnij się, że naprawdę potrzebujesz korzyści i możesz zmierzyć, że ci to pomaga.