让我们说我有一个非常大的桌子,里面装满了大量的数据(比如,足够不适合内存),我想分析一下这些行的子集。
通常做得更快:
SELECT (column1, column2, ... , columnN) FROM table WHERE (some complicated boolean clause);
然后使用ResultSet,或者更快地执行:
SELECT (column1, column2, ... , columnN) FROM table;
然后迭代ResultSet,根据你的布尔条件的java版本接受不同的行?
我认为这取决于Java迭代器/布尔评估器是否比MySQL布尔评估器更快。
答案 0 :(得分:13)
将条件发送到数据库几乎肯定更快。
答案 1 :(得分:4)
我认为归结为是否 Java迭代器/布尔评估器是 比MySQL布尔快 评估
没有。决定因素几乎肯定是必须通过网络传输的数据量(以及各种开销)。在99%的情况下,减少数据库服务器上的结果集大小是正确的。在复杂查询中,这是尤其 true,它可能导致更小的连接。
答案 2 :(得分:3)
作为一般规则,数据库获胜。对你来说几乎可以肯定。如果你想确定,请描述一下。我遇到过其他语言的案例,其中传输 lot 数据的开销被一些事务处理的事实所抵消,因为某些处理可以在DB之外完成。如果您正在评估的布尔条件在关系术语中表达极其复杂,那么您可以看到在Java中评估它的好处,但它极不可能。
答案 3 :(得分:1)
数据库旨在优化您的任务。你的语言不是。并且数据库可能具有更好的缓存资源来防止磁盘操作,而不是工作站与其正在执行的所有操作。
这有点像询问是否应该首先将数据下载到Excel中,大于Excel的datawad可以保存在内存中。