如何高效地从MySQL数据库中选择最新条目?

4

可能是重复的问题:
SQL查询以获取最新价格

我有一个包含股票价格历史记录的数据库。我想选择每个上市股票的最新价格。我知道PostreSQL有一个DISTINCT ON语句,非常适合这里。

表列是nameclosingPricedatenamedate共同形成唯一索引。

最简单(但非常低效)的方法是

SELECT * FROM stockPrices s
WHERE s.date =
(SELECT MAX(date) FROM stockPrices si WHERE si.name = s.name);

我发现更好的方法是:
SELECT *
FROM stockPrices s JOIN (
  SELECT name, MAX(date) AS date
  FROM stockPrices si
  GROUP BY name
) lastEntry ON s.name = lastEntry.name AND s.date = lastEntry.date;

如何高效地完成这个任务?我应该创建哪些索引?

重复问题:
SQL查询以获得最新价格


请参考类似的帖子 - Galwegian
1个回答

0

我认为你的第二种方法非常高效。它有什么问题吗?

你需要给姓名和日期添加索引。


如果性能需要,您必须添加索引。如果只有十支股票和一年的日常数据,我不会担心:MySQL在表扫描方面相对较好。 - Mike Woodhouse
如果他只有很少的数据,他就不会要求一个高效的方法来做这件事,对吧?即使是第一种显而易见的方法也足够了。 - Vinko Vrsalovic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接