CF - QoQ与查询

时间:2012-11-29 18:25:04

标签: coldfusion qoq

我有一个概念,即调用查询查询比来自数据库的查询更快,因为减速是在cf和db之间的通信中。这是真的。

这是否意味着循环中的QoQ是可接受的,而循环内的查询则不是。

5 个答案:

答案 0 :(得分:13)

完整的DBMS针对处理[适当编写的]查询进行了高度优化,在现代网络上,开销不会很大。

使用嵌入式数据库执行QoQ,根据正在执行的查询类型,可以对其进行优化或不进行优化。

因此,如果数据库位于不同的计算机上,则通过慢速网络,在某些情况下,QoQ可能会降低速度。如果您正在访问数据库,理想情况下,您希望在一个请求中适当地处理所有内容,并避免在循环中进行往返和重新处理。

当然,QoQ的一大好处是您可以使用它来处理非数据库中的数据 - 例如cfdirectory的结果或已转换为查询的CSV文件。


ColdFusion通过手动解析SQL然后循环遍历记录集来执行QoQ。这使得它对于简单操作(例如具有匹配键的两表连接)有效,但对于复杂组合(其中连接使用多列和/或不是直接a = b比较)效率较低。 (Brief info here。)

Railo使用H2。 H2声称速度很快,他们的网站提供了一些speed comparisons,表明它比Derby和MySQL更快 - 但当然最好是寻找独立的第三方测试,更不用说这些测试不是保证QoQ性能(我怀疑它不会有索引)。


一般情况下:在没有先进行性能测试的情况下做出任何艰难的决定,以确定您确实需要提高性能,并能够客观地确定哪种方法实际上更快。

答案 1 :(得分:4)

与数据库服务器相比,它取决于Coldfusion机器的功能,以及您尝试解决的问题。

对于小型数据集,QofQ通常非常快,因为它全部发生在您的服务器内存中。如果您尝试在大型数据集上使用QofQ,则由于在内存中保留和处理该数据所涉及的开销,您的服务器将开始出现问题。

数据库查询通常在大型数据集上优于QofQ,因为就是为设计的。数据库擅长快速处理大量数据。使用它们。

如果您正在考虑从数据库中检索大型结果集并使用QofQ进行解析,那么这可能是错误的方法。让数据库为您减少结果。如果您经常向数据库服务器询问此信息,请将其缓存在您的服务器上。

请记住,这一切都是主观的,并且将在很大程度上取决于您的特定问题,负载,数据库和服务器功能。

答案 2 :(得分:3)

我发现使用q OF q比从查询中提取DB更快。

例如,我虔诚地在销售报告中使用QoQ。我有一份销售报告,该报告将在第一季度日期范围内提取,可能会显示销售代理的销售数据,也可能显示销售产品的销售数据。

在我的数据库中,相同的表格/字段将用于同一报告中显示的两个部分。

我根据日期范围查询主表中的数据,然后查询这些结果以构建报告的每个部分。

我发现这种方法在使用本地和远程数据库的两台服务器上都更快。

答案 3 :(得分:3)

使用QofQ的次数

  • 如果您有两个数据源并且出于各种原因可以使用链接服务器
  • 当数据通过WDDX或JSON进入时,您必须进行连接
  • 如果可以将数据存储在缓存的查询中,并针对缓存的查询执行QofQ
  • 当您必须将directoryList()的结果与数据库
  • 连接时

不使用QofQ的时间

  • 当您可以将数据加载到结构中时
  • 进行大量迭代时
  • 当源数据集之一非常大时
  • 当您需要进行左,右或外连接时

有关详细信息,请参阅

http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec0e4fd-7ff0.html

这适用于CF 9,但自CF 6以来QofQ大致相同

答案 4 :(得分:0)

多德!刚刚使用了cachedwithin。