一个复杂查询 VS 多个简单查询

23

到底哪种方式更好呢?使用负责加载嵌套对象的复杂查询类,还是负责加载简单对象的简单查询类?

使用复杂查询可以减少对数据库的访问次数,但是该类将承担更多的职责。

或者使用简单查询,需要更频繁地访问数据库。在这种情况下,每个类只需要负责加载一种类型的对象。

我面临的情况是,加载的对象将被发送到一个 Flex 应用程序中(DTO)。

3个回答

16
一般来说,服务器往返时间相对于典型查询所需的时间是昂贵的,因此指导原则是要将其最小化。基本上每个一对多连接都有可能使您的结果集成倍增,因此我的方法是继续连接,直到结果集变得过大或查询执行时间太长(通常大约为1-5秒)。
根据您的平台,您可能能够并行执行查询,也可能不能。这是您应该做什么的关键决定因素,因为如果您只能一次执行一个查询,则分解查询的障碍就更高了。
有时值得将某些相对稳定的数据保留在内存中(例如国家信息),或者将它们作为单独的查询处理,但根据我的经验,这种情况相当少见。
更常见的是需要修复某些系统的性能差,这很大程度上是由于执行单独的查询(尤其是相关查询)而不是连接引起的。

9
我认为没有哪个选项“实际上更好”。这取决于您的应用程序特定、架构、使用的DBMS和其他因素。例如,我们在我们的独立解决方案中使用了多个简单查询。但是当我们将产品发展成为轻量级的互联网可访问解决方案时,我们发现我们的框架发出了大量请求,由于网络延迟导致性能下降。因此,我们对框架进行了充分的重构,以使用聚合的复杂查询。与此同时,我们仍然保持我们的独立解决方案,并从Oracle Light转向Apache Derby。再次发现我们的一些新的 复杂 查询应该简化,因为Derby执行时间太长。所以看看您真正的问题,并适当地解决它。我认为如果没有强烈的反对意见,那么简单的查询对于初学者来说是不错的选择。

4

就我的直觉来说:

只要没有证据表明需要优化性能,就应该选择简单的方式。否则,我会把“复杂对象和查询”的方法放在过早优化的篮子里。

如果你发现有真正的性能问题,那么下一步应该优化Flex和后端之间的往返传输。但是如我之前所说:这只是我的直觉,你真的应该从“高效”的定义开始,采用简单的方法并测量性能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接