ColdFusion:查询与结构



当前,我在循环中的查询如下。

<cfloop query="Superquery">
    <cfquery datasource="mysource" name="getData">
        SELECT col1, Col2
        FROM myData
        where col1 = #Superquery.IDCol#
    </cfquery>
    <!--- Some Processing --->
</cfloop>

查询不会返回太多数据。在某些情况下,它返回少于100行&amp;在某些情况下,它可以返回约5000行。但是由于它在循环中&amp;迭代可能超过100,这使我思考更好的优化方法。

方法1:使用查询查询

<cfquery datasource="mysource" name="getAllData">
        SELECT col1, Col2
        FROM myData
</cfquery>
<cfloop query="Superquery">
    <cfquery dbtype="query" name="getData">
        SELECT col1, Col2
        FROM getAllData
        where col1 = #Superquery.IDCol#
    </cfquery>
    <!--- Some Processing --->
</cfloop>

方法2:使用结构

在循环外,我的查询 getAlldata 根据方法1,并创建一个用钥匙为'col1'的结构,值为" col2"。在循环中,我使用在循环外创建的坚固进行必要的处理。

我不确定这两种方法之间的性能是否有所不同。方法1易于实现。:)只是想到得到一些建议。欢迎其他任何有效的方法。

谢谢!

查询的查询实际上与SQL查询相比非常慢,因为它没有任何索引或执行计划的概念,因此您需要小心,然后才能按照您的可能最终要降低更密集的过程。数据库引擎已被优化,可以快速执行此类操作。

您很可能会发现使用结构会表现更好,但是您确实拥有创建结构的开销。不幸的是,我不能给您一件尺寸的答案,因为这取决于您的数据和卷。

理想情况下,您希望能够在myData和创建Superquery查询的表之间进行连接。然后,您可以根据需要迭代该查询和过程,而无需再次访问数据库。

创建结构似乎使事物复杂化。
查询本身就是数组的结构。
因此,无论您想创建另一个结构,您都可以使用查询来完成。
和查询查询的结构似乎没有任何额外的优势。
如果您真的想优化事物,请尝试修改查询。
例如,正如其他人所说的那样,您可以尝试在查询中使用某种JOIN来摆脱循环。

最新更新