Смотрим план EXPLAIN, подбираем индекс по фильтру и выдаём отдельному пользователю минимальные права.
Экспортируем базу в phpMyAdmin, восстанавливаем SQL-дамп в отдельную схему и строим итоговый отчёт фестиваля.
Объединяем продажи и площадки в представление, используем его как виртуальную таблицу и знаем его ограничения.
Используем ROW_NUMBER, DENSE_RANK и LAG, сохраняя строки результата вместо свёртки в группы.
Обновляем билет и журнал прохода как единую операцию, разбираем блокировку, COMMIT и ROLLBACK.
Используем CHECK, UNIQUE и внешние ключи для качества данных, индекс под реальный фильтр и сортировку.
На модели фестиваля объясняем отдельные сущности, внешние ключи и когда использовать ON DELETE RESTRICT.
Изменяем продажи после предварительного SELECT, понимаем риск UPDATE или DELETE без WHERE.
Считаем выступления, билеты и выручку агрегатами, используем HAVING и избегаем двойного счёта.
Разбиваем запрос на этапы с подзапросами и WITH, сравниваем выручку со средним и учитываем события без продаж.
Используем CASE, TIMESTAMPDIFF, LIKE и DECIMAL для вычисляемых полей расписания и стоимости.
Создаём слоты выступлений и соединяем таблицы, чтобы получить расписание целиком; сравниваем JOIN и LEFT JOIN.