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