首页 > 解决方案 > 哪个是更好的做法?对 SQL + 复杂函数的单个查询或多个查询,每个查询都提供一个简单的函数

问题描述

在我存储用户可以购买一个或多个项目的会话的应用程序中,我试图跟踪每个项目的销售状态并为卖方汇总它们(在数量和美元价值方面)

卖方仪表板示例

*SESSION 1 (Revenues: $w, Pending receipts $x)*

ITEM A: SOLD 2, AWAITING PAYMENT 1

ITEM B: SOLD 1, AWAITING PAYMENT 0

*SESSION 2 (Revenues: $y, Pending receipts $z)*

ITEM A: SOLD 4, AWAITING PAYMENT 0

ITEM C: SOLD 0, AWAITING PAYMENT 0

我可以想象两种方法来实现这一目标。

  1. 我做了一个相对简单的查询,但结果可能意味着我有一个复杂的函数来在返回之前处理该查询的结果。
  2. 我做了很多具体的查询,但我可以将函数分解成更小的部分,这些部分将来可能会被应用程序的其他部分重复使用。

原则上,我所阅读的内容似乎表明 (2) 是更好的编码实践。但是,我还读到 PHP 中的处理比多个 SQL 查询的开销要轻得多,因此我提出了问题。

标签: phpsqllaravel

解决方案


为了考虑哪种解决方案更好,我们应该首先列出每种方法的优缺点。

单条SQL查询+复杂的PHP处理

优点

  • SQL更容易维护
  • 如果需求发生变化,数据库结构不会受到太大影响
  • 无需数据库交互即可编写测试,使其更快

坏处

  • PHP 更难维护
  • 一般来说,SQL 在处理数据方面的表现要好于 PHP
  • 由于较大的数据集性能较差

多个 SQL 查询 + 更简单的 PHP 处理

优点

  • PHP 更易于维护
  • 一般来说,SQL 在处理数据方面的表现要好于 PHP
  • 由于更好的性能也更好地处理更大的数据集

缺点

  • SQL 更难维护
  • 如果需求发生变化,数据库结构也可能会受到影响
  • 测试可能必须与数据库交互,这会使它们变慢

结论

这一切可能归结为您的情况:

  • 您将要处理的数据集有多大?
  • 性能有多重要?
  • 如何导入测试(性能)?
  • 需求多久改变一次?

推荐阅读