0

我有一系列查询,我随机获得 5 个结果,问题是通过它们需要一段时间,主要是因为它涉及一个循环来分配我可以订购的 rand 值( Railo 可以做查询)

我想知道是否有人处理过这个问题并且知道加速它的方法。

我低于 200 毫秒,这还不错,但我确信它可以加快速度。

4

3 回答 3

2

您可能根本不需要使用 QoQ。

一种选择可能是将原始查询编写为:

SELECT TOP 5 whatever,you,need
FROM table
ORDER BY rand()

根据您使用的数据库服务器更新语法。

可以同时用于常规查询和 QoQ 的另一种选择是:

  1. 只选择主键
  2. 洗牌数组(即createObject("java","java.util.Collections").shuffle(Array)
  3. 使用数组中的前五个项目来选择您需要的字段。

没有循环或更新,只有两个简单的选择。

当然,如果您的主键只是一个自动递增的整数,那么您可能会侥幸逃脱SELECT MAX(Id)然后使用RandRange来选择您的五个项目。

于 2013-05-18T20:21:06.273 回答
2

对于 Microsoft SQL Server (v2005+),此查询语法将获得 5 条随机记录:

SELECT TOP 5 *
FROM table
ORDER BY NEWID()
于 2013-05-19T22:55:37.560 回答
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 中工作。简短而简单。

于 2015-04-07T10:30:24.537 回答