在不使用orderBy的情况下获取N条最新记录



我遇到了一个优化问题,需要从有大量记录的数据库中获取n latest结果。我知道我可以通过使用orderBy来做到这一点,但我想避免它,因为orderBy在每个记录中循环,这增加了我的负载&查询时间。我在take()中找到了一个使用负数的答案,它基本上会获取最新记录,但对我来说不起作用,它会获取所有记录:

Record::all()->take(-5);

这是上一个代码的输出,它只返回空的Query Builder实例:

"supplementRecommendationsHistory" => IlluminateDatabaseEloquentBuilder {#2485 ▼
#query: IlluminateDatabaseQueryBuilder {#2484 ▶}
#model: AppRecommendedSupplement {#2483 ▶}
#eagerLoad: array:2 [▶]
#localMacros: []
#onDelete: null
#passthru: array:17 [▶]
#scopes: []
#removedScopes: []
}

对此有不同的方法吗?感谢您的帮助。

根据评论(@Justinas(的建议,我就是这样实现WHERE id > :{nextIndex - N}解决方案的:

RecommendedTest::where('id', '>', RecommendedTest::max('id') - 20)->get()->reverse()->values();

通过这种方式,我可以从一个巨大的数据库中获取最新的20条记录。我还使用reverse()->values()来恢复结果的顺序,这基本上给了我按created_at列排序的结果,这是我的初始目标。查询时间不长,大约为1000ms,这对我来说还可以,因为这是临时解决方案。

反向和数值方法的文件

最新更新