关系数据库表保存保险详细信息,比如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;