在不使用order by的情况下获得具有最大值的前5行的有效方法



关系数据库表保存保险详细信息,比如id和金额。表由数百万条记录组成。要求是在不使用的情况下,使用order by子句获取最大数量为的前5条记录。

我能想到的一个解决方案是使用临时表来维护最多5条记录,并在每次更新主表时更新这些条目,但我想知道是否有更好的解决方案来解决上述问题?

一种有效的方法是在amount desc上建立索引并使用order by。类似于:

select t.*
from t
order by t.amount desc
fetch first 5 rows only;  -- or however your database does this

这应该是非常有效的。

您可以尝试使用分析函数(下面的示例(,但仍需要在某个阶段订购

select id,
amount
from (select id,
amount,
row_number() over (order by amount desc nulls last) as rn
from t)
where rn<=5;

相关内容

最新更新