这是对MySQL数据库的一些查询。 (按历史记录)这是可行的,但我认为这是一个瓶颈。
SELECT
tb_real.One,
tb_real.Two,
tb_real.TimestampMs,
tb_real.Symbol,
tb_max.MaxTimestapmMs
FROM (SELECT
Symbol,
MAX(TimestampMs) AS MaxTimestapmMs
FROM times
WHERE Symbol = inSymbol
AND TimestampMs < inDateTo) AS tb_max
JOIN (SELECT
TimestampMs,
One,
Two,
Symbol
FROM Times
WHERE Symbol = inSymbol
AND TimestampMs < inDateTo) AS tb_real
ON tb_max.MaxTimestapmMs = tb_real.TimestampMs
;
有效,但速度足够慢。是否可以使其简单\快速?
答案 0 :(得分:0)
似乎第一个子查询总是只在Symbol = inSymbol
时才选择一行,因此您可以按如下所示重写它。并且确保您必须索引Symbol
和TimestapmMs
字段
SELECT
One,
Two,
TimestampMs,
Symbol,
TimestapmMs
FROM Times
WHERE Symbol = inSymbol
AND TimestampMs = (SELECT
MAX(TimestampMs)
FROM times
WHERE Symbol = inSymbol
AND TimestampMs < inDateTo)
如果TimestampMs
字段是唯一的(只有一个记录具有MAX值),并且此查询始终只返回一个记录,则可以使用LIMIT 1
来获取此记录:
SELECT
One,
Two,
TimestampMs,
Symbol,
TimestapmMs
FROM Times
WHERE Symbol = inSymbol
AND TimestampMs < inDateTo
ORDER BY TimestampMs DESC
LIMIT 1