历史数据表中有大约 600 万条记录。我试图找到最后记录行不等于表中最高日期的所有符号。我相信这个查询会起作用,但需要永远运行。事实上,时间太长了,每次都会超时。有没有办法让这个查询运行得更快?
select symbol, histDate
from historical_data as a
where histDate =
(select max(histDate)
from historical_data as b
where a.symbol = b.symbol);
最佳答案
您想要此查询的索引。最好的索引是historical_data(symbol, histdate)
。
您可能会发现将查询表述为更快:
select hd.*
from historical_data hd join
(select symbol, max(histDate) as maxhd
from historical_data
group by symbol
) s
on hd.histDate = s.histDate;
编辑:
哎呀。您的示例查询没有执行文本所说的操作。为此:
select symbol
from historical_data hd cross join
(select max(histDate) as maxhd from historical_data) m
group by symbol, maxhd
having max(hd.histDate) <> maxhd;
关于mysql - Date = max(Date) 运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35261118/