我有這樣的代碼來獲得每一條記錄的位置:行位置
Message.all.each_with_index do |msg, i|
message_order[msg.id] = i
end
但現在我有100K +的消息,它需要長期在遍歷所有記錄。 誰能告訴我如何做到這一點更高性能? (我正在使用oracle)
我想到了rownum,但沒有找到解決方案。 一個只返回一個消息位置的解決方案會很棒。
我有這樣的代碼來獲得每一條記錄的位置:行位置
Message.all.each_with_index do |msg, i|
message_order[msg.id] = i
end
但現在我有100K +的消息,它需要長期在遍歷所有記錄。 誰能告訴我如何做到這一點更高性能? (我正在使用oracle)
我想到了rownum,但沒有找到解決方案。 一個只返回一個消息位置的解決方案會很棒。
我不知道如果我明白你的問題。
如果需要與指定的訂單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;
這應該工作:
Message.where("id < :id", id: msg.id).count
這些消息AREN」 t訂購編號 –
那麼,你可以添加訂單(another_field),並更改「other_field
謝謝,就是這樣:) –