Rails从后一个记录向后或反向查询表的有效方法

时间:2016-03-19 15:39:02

标签: sql ruby-on-rails postgresql

使用Rails 4.2和PostgreSQL 9.4.5。我有一个事务日志表(XLog),我需要反向读取,从最后一条记录开始并继续处理直到特定条件发生。我能够做到这一点,但它需要一个“全部”方法而且效率不高。在我的测试系统中,第一条记录出现在.06秒之后,所有后续查询都是无穷小的,小于.001秒。我尝试了很多其他查询,但它们没有产生预期的结果。我正在使用ActiveRecord,但当然可以使用本机SQL查询。

这是测试代码,仅关注从最后一条记录向后读取XLog:

class EtlLastProcessed
  def initialize(company: nil)
    ActsAsTenant.with_tenant(company) do
      count = 0
      clock = Time.now
      xlogs = XLog.all.order("created_at DESC")
      xlogs.each do |xlog|
        puts Time.now - clock
        clock = Time.now
        break if count > 1000
        count += 1
        puts "Xlog date is #{xlog.created_at.in_time_zone.to_date}"
      end
      puts "ETL Last Processed done."
    end
  end
end

1 个答案:

答案 0 :(得分:0)

我改变了逻辑以有效地使用" created_at ASC"。我的整体逻辑变化是有道理的。