我有这个代码来获取每条记录的位置:
Message.all.each_with_index do |msg, i|
message_order[msg.id] = i
end
但现在我有100k +消息,并且需要很长时间才能遍历所有记录。 任何人都可以告诉我如何做到这一点更高效? (我正在使用oracle)
我想到了rownum,但没有找到解决方案。 只返回一条消息的位置的解决方案会很棒。
答案 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