Этот вопрос проверяет умение оптимизировать SQL-запросы для работы с данными, включая сортировку и ограничение выборки.
Чтобы найти самое длинное видео из топ-10 коротких, нужно отсортировать видео по длительности в порядке возрастания, взять первые 10 записей, а затем выбрать из них видео с максимальной длительностью. Оптимизация достигается с помощью индексов и правильной структуры запроса. Например, можно использовать подзапрос или CTE (Common Table Expression).
Оптимизация запроса для поиска самого длинного видео из топ-10 коротких требует понимания структуры данных, индексов и работы СУБД. Предположим, у нас есть таблица videos с полями id, title, и duration (длительность в секундах).
Нужно выбрать 10 самых коротких видео (сортировка по duration ASC).
Из них найти видео с максимальной длительностью.
Запрос должен быть быстрым и эффективным.
Один из способов — использовать подзапрос или CTE для получения топ-10, а затем выбрать максимум.
Пример с CTE:
WITH ShortVideos AS ( SELECT id, title, duration FROM videos ORDER BY duration ASC LIMIT 10 ) SELECT id, title, duration FROM ShortVideos ORDER BY duration DESC LIMIT 1;
Что делает запрос:
CTE ShortVideos выбирает 10 видео с наименьшей длительностью.
Внешний запрос сортирует эти 10 видео по убыванию длительности и берет первое (самое длинное).
Для ускорения запроса важно учитывать:
Индексы: Создайте индекс на столбец duration, чтобы ускорить сортировку.
CREATE INDEX idx_videos_duration ON videos(duration);
Ограничение выборки: Использование LIMIT минимизирует объем обрабатываемых данных.
Проверка плана запроса: Используйте EXPLAIN для анализа производительности:
EXPLAIN WITH ShortVideos AS ( SELECT id, title, duration FROM videos ORDER BY duration ASC LIMIT 10 ) SELECT id, title, duration FROM ShortVideos ORDER BY duration DESC LIMIT 1;
Можно использовать оконные функции (window functions) для упрощения логики:
SELECT id, title, duration FROM ( SELECT id, title, duration, ROW_NUMBER() OVER (ORDER BY duration ASC) AS rank FROM videos ) ranked WHERE rank <= 10 ORDER BY duration DESC LIMIT 1;
Преимущество: Оконные функции позволяют избежать вложенных запросов, что иногда улучшает читаемость.
Большой объем данных: Если таблица содержит миллионы записей, индекс на duration критически важен.
Сложные условия: Если нужно учитывать дополнительные фильтры (например, видео определенного жанра), добавьте их в WHERE до сортировки.
WHERE genre = 'shorts' AND duration IS NOT NULL
Подобные запросы применяются в системах рекомендаций или аналитики, где нужно найти "пограничные" записи (например, самое длинное видео среди коротких).
CTE и оконные функции подходят для сложных выборок с сортировкой.
Вывод:
Оптимизация таких запросов требует индексов и правильной структуры (CTE или оконные функции). Выбор подхода зависит от размера данных и сложности условий.