从 SQL 重新查询或在 ArrayList 中循环并在 Java 中过滤数据是否更快?

Dan*_*y Y 7 java mysql sql jdbc

我有一个 ArrayList,它从 SQL 查询中填充并包含表的所有行。

如果我想要这个 ArrayList 的子集(例如 WHERE column1 = x),
重新建立 SQL 连接并使用此条件获取查询,或者循环遍历 arraylist 并过滤数据是否更快?(考虑 1000 行的数组列表)

如果通过 arraylist 的循环速度更快,那么它仍然适用的大小是多少?

谢谢

LSe*_*rni 5

在 Java 中执行此操作应该总是更快。Java 对内存数组的过滤与 SQL 一样快,甚至更快。而且您还必须考虑连接数据库、发送命令和解码答案的开销。

对于真正复杂的查询,通过 SQL 完成此操作可能会更简单,并且它可能会根据数据库大小更好地扩展(想想一百万行:您要将它们全部保存在内存中吗?)。此外,SQL 查询优化器可能拥有有关列基数的更多信息,并且能够比仅逐个检查地更快的 Java 代码更有效地执行,因此总体上更快。

另一方面,也要考虑代码的可维护性。有些事情最好留给 SQL,即使这样会慢一点。

  • @MarkRotteveel,通常不会,但OP询问过滤“已经存在的”查询数组或“重复”查询是否会更快。如果数据已经在Java端(我同意你的观点,也许可以在那里做一些事情),那么重用它会更快。 (2认同)