一个复杂的查询与多个简单查询

时间:2009-03-26 09:00:18

标签: client-server data-access-layer

实际上哪个更好?让具有复杂查询的类负责加载实例嵌套对象?或者带有简单查询的类负责加载简单对象?

对于复杂的查询,您必须减少对数据库的影响,但课程将承担更多责任。

或简单查询,您需要更多地访问数据库。在这种情况下,每个类都将负责加载一种类型的对象。

我所处的情况是加载的对象将被发送到Flex应用程序(DTO)。

3 个答案:

答案 0 :(得分:15)

这里的一般经验法则是服务器往返是昂贵的(相对于典型查询需要多长时间),因此指导原则是您希望最小化它们。基本上每个一对多连接可能会使您的结果集倍增,所以我接近它的方式是继续加入,直到结果集太大或查询执行时间太长(通常大约1-5秒)。

根据您的平台,您可能会或可能无法并行执行查询。这是你应该做的一个关键决定因素,因为如果你一次只能执行一个查询,那么分解查询的障碍要高得多。

有时值得在内存中保留一些相对恒定的数据(例如国家/地区信息),或者将它们作为单独的查询进行处理,但根据我的经验,这是相当不寻常的。

更常见的是必须修复具有糟糕性能的系统,这在很大程度上是由于执行单独的查询(特别是相关查询)而不是连接。

答案 1 :(得分:7)

我不认为任何选项实际上更好。这取决于您的应用程序特定,体系结构,使用的DBMS和其他因素。

E.g。我们在独立解决方案中使用了多个简单查询。但是,当我们将我们的产品发展为轻量级的互联网可访问解决方案时,我们发现我们的框架产生了大量的请求,并且导致网络延迟导致性能下降。因此,我们充分重新设计了使用聚合复杂查询的框架。与此同时,我们仍然维护着我们的独立解决方案,并从Oracle Light迁移到Apache Derby。我们再一次发现,一些新的复杂查询应该简化,因为Derby执行的时间太长了。

所以看看你真正的问题并妥善解决。我认为,如果没有针对它们的强烈目标,简单的查询就有利于开始。

答案 2 :(得分:4)

从一种直觉上我会说:

只要没有经过验证的理由来优化性能,就可以采用简单的方法。否则我会把“复杂的对象和查询”方法放在过早优化的篮子里。

如果您发现存在真正的性能影响,那么您应该在下一步中优化flex和后端之间的往返。但正如我之前所说的:这是一种直觉,你真的应该从“高性能”的定义开始,开始简单并衡量性能。

相关问题