我有一系列查询,我随机获得 5 个结果,问题是通过它们需要一段时间,主要是因为它涉及一个循环来分配我可以订购的 rand 值( Railo 可以做查询)
我想知道是否有人处理过这个问题并且知道加速它的方法。
我低于 200 毫秒,这还不错,但我确信它可以加快速度。
我有一系列查询,我随机获得 5 个结果,问题是通过它们需要一段时间,主要是因为它涉及一个循环来分配我可以订购的 rand 值( Railo 可以做查询)
我想知道是否有人处理过这个问题并且知道加速它的方法。
我低于 200 毫秒,这还不错,但我确信它可以加快速度。
您可能根本不需要使用 QoQ。
一种选择可能是将原始查询编写为:
SELECT TOP 5 whatever,you,need
FROM table
ORDER BY rand()
根据您使用的数据库服务器更新语法。
可以同时用于常规查询和 QoQ 的另一种选择是:
createObject("java","java.util.Collections").shuffle(Array)
)没有循环或更新,只有两个简单的选择。
当然,如果您的主键只是一个自动递增的整数,那么您可能会侥幸逃脱SELECT MAX(Id)
然后使用RandRange
来选择您的五个项目。
对于 Microsoft SQL Server (v2005+),此查询语法将获得 5 条随机记录:
SELECT TOP 5 *
FROM table
ORDER BY NEWID()
我在 Railo (ColdFusion 9) 上,既不在查询中TOP
也不NEWID()
在查询 (QoQ) 中工作。如果您碰巧遇到了这种用例,并且您必须按照 QoQ 采取行动,那么这里有一个解决方案:
<cfquery name="randomizedQueryObject" dbtype="query" maxrows="10">
SELECT *, RAND() as rand
FROM someQueryObject
ORDER BY rand
</cfquery>
这会从更大的结果集中返回 10 个随机项目,并在 QoQ 中工作。简短而简单。