【问题标题】:Which is faster for filtring a set of data, a select query or a loop?过滤一组数据、选择查询或循环哪个更快?
【发布时间】:2015-10-22 21:19:23
【问题描述】:

假设我在 MySql 数据库中有大约 10000 行,我想计算多个值(总和。中位数,平均值...)。

  • 哪个更快,使用简单的 SQL 查询获取所有 10000 并使用 Java 对其进行迭代并进行计算或直接执行 SQL 查询(选择 sum(..); select count(*)...)?是否可以只执行一个返回所需值的查询?

编辑

  • 是否有关于该主题的任何指标/统计数据?
  • 可以通过连接 2 或 3 个表来获取数据

谢谢

【问题讨论】:

  • 不确定效率会不会有很大差异,但如果您可以直接使用 SQL 实现您想要的效果,我建议您这样做。
  • 那你为什么需要数据库呢?将数据存储在纯文本文件中,并在 Java 中执行所有操作。
  • "并且是否可以只执行一个返回所需值的查询?" --- 一个查询不是灵丹妙药。实际上,没有理由希望对所有内容都进行一次查询。就像想让所有文件都为 1 行。
  • @zerkms 可以从连接表中获取数据...所以纯文本文件不是一个选项
  • @Moh:从你的问题来看,你想使用连接并不明显。很明显,您想在 Java 中选择所有内容并执行任何操作

标签: java mysql select


【解决方案1】:

使用 MySQL 函数比用 Java 编写代码更好更快这是因为 MySQL 函数将比 Java 更接近数据。数据库(MySQL)函数也针对此类函数进行了极大的优化。

如果你使用java,那么你会在应用任何逻辑之前先在内存中加载那么多数据。

【讨论】:

    【解决方案2】:

    视情况而定

    这里的大多数人说它更快,因为它更接近数据等。

    但不一定是真的。

    例如,如果过滤条件很复杂,如果结果数接近记录总数,如果 DB 机器不是超级快而您的应用程序超级慢,在这种情况下让 DB 做简单的事情工作(获取所有记录)并在您的应用程序中完成工作可以更快。 (我什至没有提到DB的可扩展性低,有更多的场景可能导致DB中的过滤比应用中慢)

    所以,没有经验法则。

    我的建议是,将简单直接的过滤/聚合放在 DB 中,让 DB 做它擅长的工作。如果您需要额外的复杂计算来进行过滤,请在应用程序代码中执行(并对 DB 过滤的结果执行)。

    【讨论】:

      【解决方案3】:

      MySql 查询会更快,也可以节省大量内存和 CPU 时间。它的一般逻辑。

      【讨论】:

        【解决方案4】:

        当然会有例外,但一般来说,最好让数据库引擎进行数据过滤、聚合、排序等。数据库就是为处理这些事情而设计的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-10-12
          • 2016-03-19
          • 1970-01-01
          • 2014-01-02
          • 1970-01-01
          • 2011-01-31
          • 2011-06-13
          相关资源
          最近更新 更多