小编Mic*_*ard的帖子

从自定义队列中选择下一条消息的速度慢

我有一个简单的基于表的队列系统.在最简单的形式中,它由id,队列名称和状态组成.当从给定队列中读取下一条消息时,我们需要确保FIFO(先进先出),即具有给定状态的给定队列中的最低id.这一切都可以正常运行几千行,但是当我们达到1M +行时,它就不再适合了.

我们不能使用rownum = 1,因为这是在排序之前完成的,排序是基于id列完成的(asc).如果我制作一个游标并按id排序1000次,这大约需要100ms,这是一个很好的性能(0.1 ms /循环).如果我在查询中包含状态和队列名称(我需要,因为我需要特定队列的未读消息的最低id),10个循环(130ms /循环)需要大约1300ms,这远远不行.

我尝试在三列中的每一列上都有一个索引,也是id,queue,status的组合索引,最后是id的索引和队列和状态的组合索引.id列也是主键.已经在基于规则的设置中尝试了所有组合(使用规则提示).

此致,Michael Ringholm Sundgaard - iHedge A/S www.ihedge.dk www.ibrain.dk

sql sorting oracle indexing queue

3
推荐指数
1
解决办法
742
查看次数

标签 统计

indexing ×1

oracle ×1

queue ×1

sorting ×1

sql ×1