gpt4 book ai didi

sql - 从自定义队列中选择下一条消息的性能缓慢

转载 作者:行者123 更新时间:2023-12-01 09:39:37 27 4
gpt4 key购买 nike

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

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

我已经尝试在三列中的每一列上都有一个索引,还有一个关于 id、队列、状态的组合索引,最后是一个与 id 上的索引的组合,以及一个关于队列和状态的组合索引。 id 列也是主键。所有组合都已在基于规则的设置中尝试过(使用规则提示)。

最好的问候,Michael Ringholm Sundgaard - iHedge A/Swww.ihedge.dk www.ibrain.dk

最佳答案

我在您尝试的索引中没有看到的一件事是(队列、状态、id)上的索引。如果您将 id 放在索引的开头,它主要会破坏索引的使用,因为您正在寻找“最低的”,在应用其他标准之前这是没有意义的。

索引中列的顺序通常与实际列本身一样重要。

关于sql - 从自定义队列中选择下一条消息的性能缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1929879/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com