我需要做一个大查询,但我只想要最新的记录。
对于单个条目,我可能会做类似的事情
SELECT * FROM table WHERE id = ? ORDER BY date DESC LIMIT 1;
但是我需要为大量(数千条条目)记录提取最新记录,但只提取最新条目。
这就是我所拥有的。这不是很有效。我想知道是否有更好的方法。
SELECT * FROM table a WHERE ID IN $LIST AND date = (SELECT max(date) FROM table b WHERE b.id = a.id);
原文由 Sheldon Ross 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您不想更改数据模型,可以使用
DISTINCT ON
从表“b”中获取“a”中每个条目的最新记录:如果您想避免在查询中进行“排序”,添加这样的索引 可能会对 您有所帮助,但我不确定:
或者,如果您想以某种方式对表“a”中的记录进行排序:
替代方法
但是,上述所有查询仍然需要从表“b”中读取 _所有引用的行_,因此如果您有大量数据,它可能仍然太慢。
您可以创建一个新表,它只保存每个
a.id
的最新“b”记录——甚至将这些列移动到“a”表本身。