过滤一组数据,选择查询还是循环更快?

时间:2012-11-15 04:22:13

标签: java mysql select

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

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

编辑

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

由于

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

取决于

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

然而,这不是必须的。

例如,如果过滤条件很复杂,并且结果数量接近记录总数,并且如果数据库机器不是超快速而您的应用程序速度非常慢,那么在这种情况下,数据库执行简单job(获取所有记录)并在应用程序中完成工作可以快得多。 (我甚至没有提到过数据库的低可扩展性,有更多的情况可能会导致数据库中的过滤比应用程序更慢)

所以,没有经验法则。

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

答案 2 :(得分:1)

MySql查询速度更快,同时也节省了大量内存和CPU时间。它的一般逻辑。

答案 3 :(得分:0)

当然会有例外,但一般情况下,最好让数据库引擎进行数据过滤,聚合,排序等。数据库旨在处理这些事情。