Coldfusion QoQ速度非常慢

Coldfusion QoQ速度非常慢,coldfusion,qoq,Coldfusion,Qoq,该查询通常从缓存的查询中获取大约40k行。不管什么原因,QoQ都很慢。我试图删除大部分逻辑(不同的、分组等),但没有任何效果,这使我相信设置中存在错误。有人知道发生了什么事以及如何加速吗 subcats (Datasource=, Time=42979ms, Records=14) SELECT DISTINCT(SNGP.subtyp1) AS cat, MIN(SNGP.sortposition) A

该查询通常从缓存的查询中获取大约40k行。不管什么原因,QoQ都很慢。我试图删除大部分逻辑(不同的、分组等),但没有任何效果,这使我相信设置中存在错误。有人知道发生了什么事以及如何加速吗

subcats (Datasource=, Time=42979ms, Records=14)

            SELECT 
                DISTINCT(SNGP.subtyp1) AS cat,
                MIN(SNGP.sortposition) AS sortposition,
                MIN(taxonomy.web_url) AS url
            FROM
                SNGP,
                taxonomy
            WHERE
                SNGP.typ > ''
                AND UPPER(SNGP.typ) <> 'EMPTY'
                 AND UPPER(SNGP.DEPT) = 'SHOES' AND UPPER(SNGP.TYP) = 'FASHION' AND SNGP.SUBTYP1 <> 'EMPTY'
            GROUP BY SNGP.subtyp1
            ORDER BY SNGP.sortposition ASC
subcats(数据源=,时间=42979ms,记录=14)
挑选
与cat不同(SNGP.subtyp1),
最小值(SNGP.sortposition)作为sortposition,
作为url的最小值(taxonomy.web\uURL)
从…起
SNGP,
分类学
哪里
SNGP.typ>“”
和上部(SNGP.典型)“空”
和鞋面(SNGP.DEPT)=“鞋”和鞋面(SNGP.TYP)=“时尚”和SNGP.SUBTYP1“空”
按SNGP.subtyp1分组
按SNGP.sortposition ASC订购
  • 你必须做QoQ吗;您的原始查询是否可以修改以提供您所需的数据?你能按计划缓存你正在做的所有可能的qoq吗

  • 您正在从两个表(SNGP、分类法)中进行选择,但我没有看到它们之间的连接

  • web\u url听起来像一个字符串,为什么要对其执行MIN()

  • 在WHERE子句中,首先移动其中最严格的部分。e、 g.如果
    typ>“
    将结果限制为1000行,但
    UPPER(SNGP.typ)'EMPTY'
    将其限制为仅100行,则应将其放在第一位。这是一般的SQL建议,不确定它在QoQ中的效果如何

  • 40k行,然后只选择14个结果,听起来数据不匹配;在您尝试QoQ之前,是否有其他方法可以使数据更加受限


  • 为了调试,我将开始分解您的查询,看看您是否可以确定哪个部分需要时间。首先删除
    GROUP by
    子句,然后重新运行。然后删除
    ORDER BY
    子句并重新运行。然后开始逐个从
    WHERE
    子句中删除条件,直到看到明显的时间差。至少你会知道是什么导致了延迟,然后也许可以想出一个更好的方法来完成这一部分。事情就是这样。也许你还有另一种方法来实现你的目标。他似乎在QoQ的范围内。来自:查询查询非常适合于5000到50000行的表,并且只受ColdFusion主机内存的限制。该站点托管在一个糟糕的服务器上,内存可能是个问题。“查询大约有40k行”。。。正确的。。。所以这种数据处理应该在数据库中进行,对吗?不在CF的内存中使用非常基本的SQL处理引擎。即使它工作得很快,我想你也不应该在CF中这样做。我试图得到一个更好的结果集,但问题是这是一系列产品过滤器的结果。不幸的是,Coldfusion中的QoQ没有连接功能。MIN的存在纯粹是为了避免使用distinct进行分组。至于第四,我不知道在哪里用这种方式工作,这是一个很好的信息。很好的建议,但我认为我们的整体数据库设计只是过时的。它确实需要更多的规范化,这样我们才能更好地利用索引。感谢您的建议。您可以加入QoQ:从tbl1 T1、tbl2 T2中选择COL,其中T1.PK=T2.FKQoQ确实支持一些加入功能。来自:查询的查询通过WHERE子句支持联接。查询查询不支持通过内部联接或外部联接子句进行联接。注意:查询查询仅支持两个表之间的联接。