ColdFusion:查询 VS 结构

ColdFusion: Query VS Structures

目前,我在循环中有一个查询,如下所示。

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

查询没有 return 太多数据。在某些情况下,它 return 少于 100 行,而在某些情况下它可以 return 大约 5000 行。但由于它在一个循环内并且迭代次数可以超过 100,这让我想到了更好的优化方法。

方法一:使用查询中的查询

<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:使用结构

在循环外,我根据方法 1 查询 getAllData,并创建一个结构,其中键为 'col1',值为 'col2'。在循环内部,我使用在循环外部创建的结构进行必要的处理。

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

谢谢!!

与 SQL 查询相比,查询的查询实际上非常慢,因为它没有任何索引或执行计划的概念,因此您在沿着这条路线前进之前需要小心,因为您很可能会结束进行更慢更密集的过程。数据库引擎经过优化可以快速完成此类操作。

您可能会发现使用结构的性能会更好,但您确实需要创建结构的开销。不幸的是,我不能给你一个千篇一律的答案,因为这取决于你的数据和数量。

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

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