加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用Postgresql进行高效的最新记录查询

发布时间:2020-12-13 16:36:39 所属栏目:百科 来源:网络整理
导读:我需要做一个大的查询,但我只想要最新的记录。 对于单个条目,我可能会这样做 SELECT * FROM table WHERE id = ? ORDER BY date DESC LIMIT 1; 但是我需要为最大记录(数千条目)提供最新记录,但只能记录最新的记录。 这是我有的这不是很有效率。我想知道是
我需要做一个大的查询,但我只想要最新的记录。

对于单个条目,我可能会这样做

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);
如果您不想更改数据模型,可以使用DISTINCT ON从“a”中的每个条目从表“b”获取最新的记录:
SELECT DISTINCT ON (a.id) *
FROM a
INNER JOIN b ON a.id=b.id
ORDER BY a.id,b.date DESC

如果要避免查询中的“排序”,添加这样的索引可能会帮助您,但我不确定:

CREATE INDEX b_id_date ON b (id,date DESC)

SELECT DISTINCT ON (b.id) *
FROM a
INNER JOIN b ON a.id=b.id
ORDER BY b.id,b.date DESC

或者,如果要从表“a”排序记录某种方式:

SELECT DISTINCT ON (sort_column,a.id) *
FROM a
INNER JOIN b ON a.id=b.id
ORDER BY sort_column,a.id,b.date DESC

替代方法

然而,所有上述查询仍然需要从表“b”读取所有引用的行,因此如果您有大量数据,则可能仍然太慢。

您可以创建一个新表,它只保存每个a.id的最新“b”记录 – 甚至将这些列移动到“a”表中。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读