我有一张table myTable
有四列:
id UUID,
user_id UUID ,
text VARCHAR ,
date TIMESTAMP
( id
是主键 user_id
在该表中不是唯一的)
我想找回 user_id
按其最新条目排序,我当前正在执行此查询:
SELECT user_id FROM myTable GROUP BY user_id ORDER BY MAX(date) DESC
问题是 GROUP BY
需要很长时间。有没有更快的方法来实现这一点?我试着用一个窗口函数 PARTITION BY
正如这里所描述的,检索每个组中的最后一条记录-mysql,但它并没有真正加快速度。我也确保 user_id
已编制索引。
我的postgres版本是10.4
编辑:上面的查询,我目前使用的功能是正确的,问题是它的速度慢。
2条答案
按热度按时间mhd8tkvw1#
从索引开始
user_id, date desc
. 那也许会有帮助。您也可以尝试过滤--一旦有了这样一个索引:
但是,您可能会发现
order by
最终花费的时间几乎和group by
.此版本肯定会对子查询使用索引:
nfg76nw02#
您的查询似乎与您的需求相关:
我推荐一个关于
(user, date desc)
加快速度。它必须是两个列上的单个索引。你也可以试着
distinct on
,这可能会或不会给您带来更好的性能: