【问题标题】:Loops in Database vs in application数据库中的循环与应用程序中的循环
【发布时间】:2018-07-05 15:27:51
【问题描述】:

很快我计划将我的应用程序重写为 Java(来自 VB.NET),因为我有机会在新应用程序中进行大量代码清理,因为用 VB.NET 编写的应用程序是我的第一个应用程序,它对一个人来说非常大。

无论如何,我一直在考虑在 MySQL 存储过程中使用循环(我讨厌,我真的不知道为什么),如果查询数据库中需要执行循环的数据可能更好,然后使用客户端PC 执行所有这些操作,然后将数据发送回数据库。

一个操作示例:在我的应用程序中,有货物进出。当我销售商品时,我需要使用先进先出规则将销售与之前购买的商品联系起来。例如,我买了 10 根香蕉,然后又买了 10 根,然后又买了 20 根。然后我想卖掉 30 根香蕉,所以我先链接了 10 根香蕉,然后剩下 20 根,所以我再链接了 10 根香蕉,最后剩下 10 根,然后我把它和最后一批香蕉联系起来,但我没有用完所有的香蕉,所以我剩下了 20 根香蕉。

我的看法:

  1. 存储过程中的循环应该更快,因为它将所有数据集中在一个地方,但我不确定在数据库中执行此类操作是否是一种好习惯。

  2. 应用程序中的循环需要从数据库中获取数据,然后将其发回,这可能会造成问题,但我个人认为除 SQL 之外的其他语言的循环更易于阅读和调试。

你怎么看?

【问题讨论】:

  • 一般来说:循环,坏;基于 SQL 集合的操作,不错。您可能会对用 SELECT 语句替换循环的频率感到惊讶。
  • 在深入了解存储过程之前,请先试用一个小案例并确保它对您有所帮助。 MySQL 存储过程会使您的应用程序变慢。
  • 这是一个很难回答的问题,我不认为它可以在没有太主观的情况下回答。试试哪种方法更快、更安全并且可能更便携。
  • 好吧,我尝试使用 INSERT INTO 和 SELECT 语句替换该循环,但我做不到。这可能是我缺乏知识,因为除了了解基础知识之外,我从未学习过任何语言。大部分都是我自己学的。
  • 这里的大多数人都自学了技能,但他们并没有停留在基础知识上。如果你解决问题的方法是“我试过了,但我做不到”,那么你永远学不会。

标签: java mysql sql vb.net loops


【解决方案1】:

试图客观地回答我会说:这取决于您的查询的复杂性、您需要处理的数据量以及您使用的 DBMS。

我还想补充一点,因为数据是在数据库中处理的,它不必比您的应用程序更快 - 数据库的主要质量在于基于 SQL 集的操作,正如 Gordon Linoff已经写好了。

如果您不分析数十万个数据集,那么您可能不需要过多担心性能,但更多的是关注哪种方式最易于维护。

根据我的经验,提供过滤数据的简单选择和在我的应用程序中处理它们的智能循环的组合总是做得很好,因为它可维护且相当快。

在您的示例中,这意味着:使用 SQL 将您的库存过滤为香蕉并按日期对它们进行排序(显然)。然后在应用程序中循环查看结果,并在获得所需数量的香蕉后停止

使用加窗求和函数,您甚至可以将查询结果限制在某个点,即数量的累积总和通过某个值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 2014-12-28
    • 1970-01-01
    • 2011-05-11
    • 2015-09-18
    • 1970-01-01
    相关资源
    最近更新 更多