我试图了解以下哪个是更好的选择:
- 使用 Python 从 MySQL 查询的输出计算数据。
- 在查询本身中执行计算。
例如,查询返回 20 行 10 列。在 Python 中,我计算某些列的差异或除法。
在查询中还是在 Python 中这样做更好?
我试图了解以下哪个是更好的选择:
例如,查询返回 20 行 10 列。在 Python 中,我计算某些列的差异或除法。
在查询中还是在 Python 中这样做更好?
这可能是一个品味问题,但......
...为了给你一个与Alma Do Mundo完全相反的答案,对于(不是那么)对SELECT ...
子句进行的简单计算,我通常会推动使用数据库“作为计算器”。
计算(在SELECT ...
子句中)是执行查询时的最后一步。此时仅使用相关数据。所有的“大工作”都已经完成(处理JOIN
、where 子句、聚合、排序)。
此时,对数据执行一些算术运算的额外负载确实很小。这将减少您的应用程序和数据库服务器之间的网络流量。
这可能是一个品味问题......
如果您正在对连续计算进行基本算术运算,请在 SQL 中执行。这使您可以选择将结果封装在视图或存储过程中。在许多数据库中,它还提供了并行执行语句的可能性(尽管数据行很少,性能不是问题)。
如果您在 MySQL 中的行之间进行操作(例如获取列的最大值),那么平衡会更加均匀。大多数数据库支持这些计算的简单函数,但 MySQL 不支持。查询的复杂性增加了在客户端进行这些计算的权重。
在我看来,最重要的考虑是代码的可维护性。通过使用数据库,您必须将业务规则合并到数据库本身中(例如,哪些实体与哪些其他实体相关)。维护代码的一个主要问题是业务逻辑在各种系统中传播。我更喜欢采用一种方法,使此类逻辑尽可能地精简,在不同层之间创建非常清晰的 API。
对于这种方法,对数据库的“读取”访问将通过视图进行。您正在谈论的逻辑将进入视图并可供数据库的任何用户使用——确保使用数据库的不同功能之间的一致性。“写”访问将通过存储过程进行,确保一致地检查业务规则并正确记录操作。