【问题标题】:Query complexity vs code complexity查询复杂度与代码复杂度
【发布时间】:2018-04-05 12:32:51
【问题描述】:

所以我的问题很简单,在代码中进行计算(比如说 java)或只是进行复杂的数据库查询(如果我们假设我们可以以两种方式执行相同的操作)更好更快?一般来说,哪种方法更好,为什么?

【问题讨论】:

  • 问问自己,哪一个是可重用的,谁拥有业务逻辑(数据库或java代码或两者)。
  • 开发更快还是执行更快?

标签: sql database hibernate


【解决方案1】:

我会在代码中做。

在数据库中的查询中进行业务计算会使应用程序的逻辑传播并不容易理解,而且您经常会绑定到特定的存储(即 SQL Server/Oracle/MySql/etc),从而有可能更改存储范例(即到 NoSQL DB)。 然后在代码中您可以应用一些注入来轻松更改代码的行为,使其更易于管理。

【讨论】:

  • 出于完全相同的原因,我建议在 SQL 中进行。
  • 你能激励吗?
  • 数据上的业务逻辑应数据一起存储,以便所有用户看到相同的逻辑。同样,数据完整性检查应该在数据库中——这是数据库所做的事情之一。我花了太多时间处理随时间变化的应用程序中的业务逻辑。
  • 我能理解你的动机,即使我不完全同意。可以进行完整性检查,但不能用于业务逻辑(恕我直言)
【解决方案2】:

我通常发现编写查询来做我需要的事情更快(在开发时间)。第一轮侧重于逻辑正确性,我将使用该查询完成其余功能。在这个阶段我尽量避免在循环中进行查询,否则我不会太担心性能。

然后,我将看看整个功能的性能。如果查询太慢,我会解释它并查看服务器的统计信息。我的第一个重点是索引,如果这不起作用,我会尝试重组查询。有时相关子查询比连接快,有时联合比 WHERE 子句中的析取快,有时正好相反。

如果使用单个查询无法获得令人满意的性能,我可能会将其分解为多个查询和/或在代码中执行一些工作。这样的代码往往比等效查询更复杂和更长,因此除非必要,否则我会尽量避免使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-13
    • 2021-04-22
    • 1970-01-01
    • 2017-02-09
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多