使用复杂的布尔值来限制MySQL端或Java端的ResultSet是否更快?

时间:2010-04-24 21:59:34

标签: java database boolean-operations

让我们说我有一个非常大的桌子,里面装满了大量的数据(比如,足够不适合内存),我想分析一下这些行的子集。

通常做得更快:

SELECT (column1, column2, ... , columnN) FROM table WHERE (some complicated boolean clause);

然后使用ResultSet,或者更快地执行:

SELECT (column1, column2, ... , columnN) FROM table;

然后迭代ResultSet,根据你的布尔条件的java版本接受不同的行?

我认为这取决于Java迭代器/布尔评估器是否比MySQL布尔评估器更快。

4 个答案:

答案 0 :(得分:13)

将条件发送到数据库几乎肯定更快。

  • 您可以避免传输大量您不需要的数据行。
  • 数据库可能比表扫描更快地使用某些东西。它可能能够使用一个索引,使其能够更快地找到有趣的行,而无需检查每一行的条件。

答案 1 :(得分:4)

  

我认为归结为是否   Java迭代器/布尔评估器是   比MySQL布尔快   评估

没有。决定因素几乎肯定是必须通过网络传输的数据量(以及各种开销)。在99%的情况下,减少数据库服务器上的结果集大小是正确的。在复杂查询中,这是尤其 true,它可能导致更小的连接。

答案 2 :(得分:3)

作为一般规则,数据库获胜。对你来说几乎可以肯定。如果你想确定,请描述一下。我遇到过其他语言的案例,其中传输 lot 数据的开销被一些事务处理的事实所抵消,因为某些处理可以在DB之外完成。如果您正在评估的布尔条件在关系术语中表达极其复杂,那么您可以看到在Java中评估它的好处,但它极不可能。

答案 3 :(得分:1)

数据库旨在优化您的任务。你的语言不是。并且数据库可能具有更好的缓存资源来防止磁盘操作,而不是工作站与其正在执行的所有操作。

这有点像询问是否应该首先将数据下载到Excel中,大于Excel的datawad可以保存在内存中。