行位置在100k +记录中

时间:2014-02-07 10:49:26

标签: ruby-on-rails oracle activerecord rownum

我有这个代码来获取每条记录的位置:

Message.all.each_with_index do |msg, i|
    message_order[msg.id] = i
end

但现在我有100k +消息,并且需要很长时间才能遍历所有记录。 任何人都可以告诉我如何做到这一点更高效? (我正在使用oracle)

我想到了rownum,但没有找到解决方案。 只返回一条消息的位置的解决方案会很棒。

2 个答案:

答案 0 :(得分:1)

我不知道我是否理解你的问题。

如果您需要具有指定订单ID的消息(例如:5),您可以执行以下操作:

SELECT message
FROM (SELECT message, ROWNUM AS ID
      FROM (SELECT message
            FROM tab1
            ORDER BY some_date))
WHERE ID = 5;

或者,使用分析函数:

SELECT message
FROM (SELECT message,
             ROW_NUMBER() OVER(ORDER BY some_date) AS ID
      FROM tab1)
WHERE ID = 5;

答案 1 :(得分:0)

这应该有效:

Message.where("id < :id", id: msg.id).count