Задание 4: Оптимизировать запрос WHERE DATE(tep.available_from_departure_date) = departureDate. Объяснить проблему и предложить решение.

Оптимальное решение — переписать условие так, чтобы функция не применялась к столбцу, а к параметру или использовать диапазон дат. Например, если departureDate — это дата без времени, можно сделать так:

Короткий ответ

Что ответить на собеседовании

Проблема с запросом WHERE DATE(tep.availablefromdeparturedate) = departureDate в том, что применение функции DATE() к столбцу availablefromdeparturedate приводит к тому, что индекс на этом столбце не используется, и база данных вынуждена делать полный скан таблицы, что сильно снижает производительность.

Подробный разбор

Ответ с пояснениями

Проблема с запросом WHERE DATE(tep.available_from_departure_date) = departureDate в том, что применение функции DATE() к столбцу available_from_departure_date приводит к тому, что индекс на этом столбце не используется, и база данных вынуждена делать полный скан таблицы, что сильно снижает производительность.

Оптимальное решение — переписать условие так, чтобы функция не применялась к столбцу, а к параметру или использовать диапазон дат. Например, если departureDate — это дата без времени, можно сделать так:

WHERE tep.available_from_departure_date >= departureDate
  AND tep.available_from_departure_date < departureDate + INTERVAL 1 DAY

Таким образом, условие проверяет, что available_from_departure_date попадает в интервал от начала departureDate до начала следующего дня, что позволяет использовать индекс по столбцу и значительно ускоряет запрос.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку