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
来摆脱循环。
目前,我在循环中有一个查询,如下所示。
<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
来摆脱循环。