0

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

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

但是现在我有 100k+ 条消息,并且遍历所有记录需要很长时间。谁能告诉我如何做到这一点更高效?(我正在使用甲骨文)

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

4

2 回答 2

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;
于 2014-02-07T11:21:11.197 回答
0

这应该有效:

Message.where("id < :id", id: msg.id).count
于 2014-02-07T11:19:34.007 回答