【问题标题】:Should I always reduce count of database queries even if they do not give significant performance boost?即使它们没有显着提高性能,我是否应该始终减少数据库查询的数量?
【发布时间】:2017-08-19 17:09:33
【问题描述】:

我读到过早优化是万恶之源。因为它需要更多时间,而且它会使代码更复杂。

有时您需要通过 id 获取某些项目。这是快速查询。

然后在同一请求中,您需要在另一个函数中再次获取该项目的信息。

再次调用查询是不是很糟糕?或者我是否需要重用获取的对象,即使它可能只节省最终用户不会感觉到的几毫秒。除非许多用户同时进行相同的查询。

好的,举个例子:

function getItem() 
{
     $item = null;
     if ($someCondition) {

          $item = $this->repository->getById(1);
     }

     someFunction($item);
}

function someFunction($item) 
{
     if ($item == null) { 

          $item = $this->repository->getById(1);
     }

     doSomething($item);

}

所以在 someFunction 中我们添加了一个检查 - 额外的逻辑来知道该项目是否被提取。在这个简单的例子中,添加更多逻辑是没有问题的。

但在现实世界的应用程序中,您需要添加更多逻辑只是为了优化而不是第二次获取项目。

更多逻辑 - 更多时间编写和阅读代码。

ORM 是不关心优化的例子——它们只是延迟加载相关的项目,例如 Doctrine。因此,作为开发人员,您无需编写连接其他表的查询,从而节省时间。

一些程序员说如果它可以避免两次相同的查询,它的代码很丑。

在某些情况下,优化可能需要半小时或 1 小时。加起来,生产力会因此而降低。

遇到这些情况我们应该怎么做?

【问题讨论】:

    标签: database optimization


    【解决方案1】:

    我认为必须按照要求进行调用。 尽可能多地查询数据。查询或获取更多数据将不必要地消耗更多系统资源、网络带宽。 另一方面,多次往返也会给系统带来负担。 考虑分页。没有搜索结果可能很大,并且给出每个结果不仅耗时而且对用户来说是不必要或多余的。用户甚至可能不会查看每个结果。 因此,先弄清楚需要哪些数据,然后相应地定制命令查询。 一些系统,如 kafka,开始支持请求批处理以提高性能

    【讨论】:

    • 这与更多数据无关。问题是 - 我是否查询相同的数据,只是为了提高效率并减少代码中的逻辑。
    • 对于上述情况,它的性能会降低,并且需要大量维护。 someFunction() 必须对传递的对象采取行动,即使它确实知道必须对哪个项目采取行动。明确定义的职责会更加清晰。
    猜你喜欢
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2020-04-25
    • 2012-10-20
    • 1970-01-01
    • 2010-10-24
    相关资源
    最近更新 更多