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