У меня есть две таблицы и медленный запрос в MySQL.
Таблицы:
Таблица клипов с полями channel, start_time, end_time
Таблица показывает с полями channel, start_time,end_time
в обеих таблицах есть индексы для поля start_time.
Я пытаюсь найти шоу, которое началось незадолго до клипа для многих клипов.
Пока у меня есть этот запрос:
SELECT (
SELECT shows.id
FROM shows
WHERE shows.starttime<=clips.starttime AND shows.channel=clips.channel
ORDER BY shows.starttime DESC
LIMIT 1) as show_id,
clips.*
FROM clips
Для небольшого количества клипов это прекрасно работает, но для большого количества клипов это становится слишком медленным.
Насколько я понимаю, чтоЗависимый подзапрос должен быть очень быстрым, поскольку для start_time существует индекс, и все, что нужно сделать, - это поиск по индексу.Тем не менее, он медленный и объясняет состояние запроса «используя где» вместо «используя индекс».
Вот вывод команды объяснения
--+------------------+-----+-----+------------+---------+------+----+------+-----------------------+
id| select_type |table|type |possibleKeys| key |keylen|ref |rows | Extra |
--+------------------+-----+-----+------------+---------+------+----+------+-----------------------+
1|PRIMARY |clips|range| startDate |startDate| 8 |NULL| 9095 |Using where;Using index|
2|DEPENDENT SUBQUERY|shows|index| startDate |startDate| 8 |NULL|287896|Using where;Using index|
--+------------------+-----+-----+------------+---------+------+----+------+-----------------------+
Будем весьма благодарны за любые предложения по улучшению производительности для этой задачи.