通过在 Oracle 中导致速度变慢 select 来排序

Order by causing slower select in Oracle

我有一个table,里面有各种程序插入的交易记录,我会一一处理。记录是一条一条选择的,有一个优先级字段,先处理数量最少的。

我当前的查询:

SELECT * FROM (SELECT CODE,NAME,TYPE,START_DATE, LANGUAGE, PRIORITY, SOURCE 
FROM TBL_INQUEUE ORDER BY PRIORITY) q WHERE ROWNUM = 1

当数据集变大时,查询会变慢运行。我们在 PRIORITY 列上添加了索引,但它没有帮助。我们尝试删除 ORDER BY 子句,性能几乎翻了一番,但我们需要该子句来确保首先处理优先记录。

有没有办法优化这个?

更新

根据提供的答案,这里有两个解释计划:

使用索引排序

最大(优先级)

PRIORITY 设置为 NOT NULL,是吗?否则将不会使用该索引。

不过,您可以通过在 (PRIORITY, 0) 上创建基于函数的复合索引或在查询中包含 "where priority is not null" 来解决该问题。

也许这会有所帮助?

SELECT CODE,NAME,TYPE,START_DATE, LANGUAGE, PRIORITY, SOURCE 
FROM TBL_INQUEUE 
WHERE PRIORITY = (SELECT MAX(PRIORITY) FROM TBL_INQUEUE)
AND ROWNUM = 1

注意:使用 "and rownum=1" 是任意的;也就是说,如果有多行共享 MAX(PRIORITY) 值,则可以选择这些行中的任何一行。