Я пытаюсь найти самое последнее время входа в кучу конкретных дат. Когда я бегу
select max(ts) as maxts from factorprice where ts <= '2011-1-5'
Возвращается очень быстро.
EXPLAIN дает select_type SIMPLE и «Выбирать оптимизированные таблицы».
Но когда я бегу
select (select max(ts) from factorprice where ts <= dates.dt) as maxts, dates.dt
from
trends.dates where dates.dt in ('2011-1-6');
Возвращение занимает много времени (~ 10 секунд).
Объяснение дает:
- select_type = PRIMARY table = строки дат = 506 Extra = Использование где
- select_type = DEPENDENT SUBQUERY table = factorprice type = index
возможный_ключ = первичный ключ = первичный ключ = 8 строк = 26599224 Дополнительно = использование
где; Использование индекса
Этот запрос также занимает много времени (10 секунд)
select dt, max(ts) as maxts from factorprice as f inner join trends.dates as d
where ts <= dt and dt in ('2011-1-6')
group by dt;
Объяснение дает:
- select_type = SIMPLE таблица = тип d = ВСЕ строки = 509 Дополнительно = Использование где
- select_type = SIMPLE table = f type = range возможный_keys = PRIMARY key = PRIMARY keylen = 8 строк = 26599224 Дополнительно = Использование
где; Использование индекса
Я бы хотел сделать эту же операцию в разные дни. Есть ли способ, которым я могу сделать это эффективно?