我有一系列查询可以随机获得5个结果,问题是它需要一段时间来完成它们,主要是因为它涉及一个循环来分配我可以订购的rand值by(Railo可以查询)
我想知道是否有人处理过此问题,并知道如何加快速度。
我低于200毫秒,这不错,但我确信它可以加速。
答案 0 :(得分:2)
您可能根本不需要使用QoQ。
一个选项可能是将原始查询编写为:
SELECT TOP 5 whatever,you,need
FROM table
ORDER BY rand()
根据您正在使用的数据库服务器更新语法。
可以对常规查询和QoQ进行的另一个选项是:
createObject("java","java.util.Collections").shuffle(Array)
)没有循环或更新,只需两个简单的选择。
当然,如果您的主键只是一个自动递增的整数,那么您可能会使用SELECT MAX(Id)
,然后使用RandRange
来挑选您的五个项目。
答案 1 :(得分:1)
对于Microsoft SQL Server(v2005 +),此查询语法将获得5个随机记录:
SELECT TOP 5 *
FROM table
ORDER BY NEWID()
答案 2 :(得分:1)
我在使用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中工作。简短而简单。