我有一个网络日志列表。每行都有一个时间戳,我需要提取不同的时间戳,以便我可以将它们用于以后的查询。目前我正在使用以下查询:
select distinct time from metastatus
现在我首先要确认select distinct
查询返回排序值?
其次,我已经创建了数据库用于上述查询的时间索引。
最后,我确实考虑过检索所有时间,然后通过我的代码找到唯一值,但是对于我来说,检索所有时间(160,000,000)的值太多了。
谢谢,詹姆斯
我有一个网络日志列表。每行都有一个时间戳,我需要提取不同的时间戳,以便我可以将它们用于以后的查询。目前我正在使用以下查询:
select distinct time from metastatus
现在我首先要确认select distinct
查询返回排序值?
其次,我已经创建了数据库用于上述查询的时间索引。
最后,我确实考虑过检索所有时间,然后通过我的代码找到唯一值,但是对于我来说,检索所有时间(160,000,000)的值太多了。
谢谢,詹姆斯
获取DISTINCT
PostgreSQL 使用的值的常用方法是对行进行排序,然后选择每组中的第一个。这就是为什么你通常会得到一个排序的结果,但 Postgres 对顺序没有任何断言。只需添加一个ORDER BY
同意该DISTINCT
条款的内容。无论如何,从文档的角度来看它会更好。通常不会花费任何额外费用。检查EXPLAIN ANALYZE
以确认。
在 Postgres 之外检索所有行并进行排序的想法是无稽之谈。这甚至不可能接近针对此类任务进行了优化的 RBDMS 的性能。您还会通过电线传输相当多的噪音。考虑这个相关问题下的答案。