使用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
答案 0 :(得分:0)
我改变了逻辑以有效地使用" created_at ASC"。我的整体逻辑变化是有道理的。