【问题标题】:Best way to query the latest 1000 records from a table with thousands of rows?从具有数千行的表中查询最新 1000 条记录的最佳方法?
【发布时间】:2012-08-26 16:54:22
【问题描述】:

我有这个 postgresql 代码。

SELECT * 
FROM listings 
WHERE status != 'inactive' 
ORDER BY pkey DESC LIMIT 1000 OFFSET 0

准确地说,这将查询 FIRST 1000 个仍处于活动状态的列表,然后对其进行 DESC 排序。 是否有查询最新/最新数据的最佳方法? 例如,我有 500000 行,现在当我执行查询时,我希望 DESC 查询 499000-500000。

感谢您的帮助。

【问题讨论】:

  • 既然如此,为什么要标记 php?

标签: sql postgresql sql-order-by


【解决方案1】:

言简意赅,你说

这将查询前 1000 个仍处于活动状态的列表,然后对其进行 DESC 排序

这是不准确的。它将排序排序 id DESC 然后选择“第一个”1000(当排序 DESC 时,可以将其视为“最后一个”1000)。

所以,我认为你的问题的答案是你的问题。您显示的查询将选择“最后一个”(即在列 'pkey` 中具有 最大 值的记录)1000 条记录,从 最近 到一个 一千年前。

请注意,唯一真正需要注意的是,它并不完全是 499000-500000,只有当所有 1,000 个最近的行都“活动”时才会如此。

【讨论】:

    【解决方案2】:

    Y 降序排列的最后 X 条记录与 Y 升序排列的前 X 条记录相同,不是吗?得到结果后,您必须再次翻转订单。

    简单示例:

    Data: C, E, B, A, D
    
    Descending:  E, D, C, B, A
    Descending (last 3):  C, B, A
    
    Ascending:  A, B, C, D, E
    Ascending (first 3):  A, B, C
    Ascending (first 3, reverse sorted):  C, B, A
    

    【讨论】:

      猜你喜欢
      • 2018-02-22
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      相关资源
      最近更新 更多