ColdFusion 9-前n个随机查询结果

ColdFusion 9-前n个随机查询结果,coldfusion,coldfusion-9,cfml,qoq,Coldfusion,Coldfusion 9,Cfml,Qoq,我做了一系列的查询,随机得到5个结果,问题是需要一段时间才能完成,主要是因为它涉及到一个循环来分配一个rand值,我可以根据它排序(Railo可以在查询中这样做) 我想知道是否有人处理过这件事,并且知道如何加快速度 我的速度低于200毫秒,这还不错,但我相信速度可以加快。您可能根本不需要使用QoQ 一种选择可能是将原始查询编写为: SELECT TOP 5 whatever,you,need FROM table ORDER BY rand() 根据正在使用的数据库服务器更新语法 另一个选项是

我做了一系列的查询,随机得到5个结果,问题是需要一段时间才能完成,主要是因为它涉及到一个循环来分配一个rand值,我可以根据它排序(Railo可以在查询中这样做)

我想知道是否有人处理过这件事,并且知道如何加快速度


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

您可能根本不需要使用QoQ

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

SELECT TOP 5 whatever,you,need
FROM table
ORDER BY rand()
根据正在使用的数据库服务器更新语法

另一个选项是,可以对常规查询和QoQ执行以下操作:

  • 仅选择主键
  • 洗牌数组(即
    createObject(“java”,“java.util.Collections”)。洗牌(数组)
  • 使用数组中的前五项选择所需的字段
  • 没有循环或更新,只有两个简单的选择


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

    您可能根本不需要使用QoQ

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

    SELECT TOP 5 whatever,you,need
    FROM table
    ORDER BY rand()
    
    根据正在使用的数据库服务器更新语法

    另一个选项是,可以对常规查询和QoQ执行以下操作:

  • 仅选择主键
  • 洗牌数组(即
    createObject(“java”,“java.util.Collections”)。洗牌(数组)
  • 使用数组中的前五项选择所需的字段
  • 没有循环或更新,只有两个简单的选择

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

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

    SELECT TOP 5 *
    FROM table
    ORDER BY NEWID()
    
    对于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>
    
    
    选择*,RAND()作为RAND
    来自某个查询对象
    兰特订购
    
    这将从更大的结果集中返回10个随机项,并以QoQ的形式工作。简短而简单。

    我在Railo(ColdFusion 9)上,
    TOP
    NEWID()
    都不适用于查询查询(QoQ)。如果您碰巧遇到了这个用例,并且必须根据QoQ采取行动,那么这里有一个解决方案:

    <cfquery name="randomizedQueryObject" dbtype="query" maxrows="10">
    SELECT *, RAND() as rand
    FROM someQueryObject
    ORDER BY rand
    </cfquery>
    
    
    选择*,RAND()作为RAND
    来自某个查询对象
    兰特订购
    

    这将从更大的结果集中返回10个随机项,并以QoQ的形式工作。简短而简单。

    您不清楚您当前使用的流程-是否要求使用QoQ执行此操作?这意味着作为查询的子集,但如果结果更快,我认为您不清楚您当前使用的流程-是否要求使用QoQ执行此操作?这意味着作为查询的子集,但是如果结果更快,我就选它,谢谢,我完全忘了提到我的db类型。我使用的是MS SQL,因此
    top
    好的,您可能还希望
    ORDER BY newid()
    用于MS SQL,并且可能是相关的。嘿,谢谢你,我完全忘了提到我的db类型。我使用的是MS SQL,因此
    top
    Ok,您可能还需要
    ORDER BY newid()
    用于MS SQL,并且可能是相关的。它在QoQ中不起作用。它说兰德遇到的问题()嗯。。。这对我来说很好。也许是因为我在铁路上,兰德()才起作用?不能肯定。即使RAND()不适用于您,也尝试以其他方式生成一个随机数,并将其放入自定义的“RAND”列中。是的,Railo允许,但ACF不适用于QoQ:(它不适用于QoQ。它说RAND()遇到的问题,嗯……对我来说很好。也许RAND()有效,因为我在Railo?不能确定。即使RAND()也不适用)不适用于您,请尝试以其他方式生成一个随机数,并将其放在自定义“rand”列中。是的,Railo允许,但ACF不在QoQ中:(