我有一个从 SQL 查询中填充并包含表的所有行的 ArrayList。
如果我想要这个 ArrayList 的一个子集(比如 WHERE column1 = x)
,重新建立 SQL 连接并获取具有此条件的查询是否更快,或者循环遍历 arraylist 并过滤数据?(考虑 1000 行的数组列表)
如果通过arraylist的循环更快,直到它仍然适用的大小是多少?
谢谢
在 Java 中执行此操作应该总是更快。内存数组的 Java 过滤与 SQL 一样快,甚至更快。而且您还必须考虑连接到数据库、发送命令和解码答案的开销。
对于非常复杂的查询,通过 SQL 完成此操作可能会更简单,并且它可能更好地适应数据库大小(想想一百万行:您要将它们全部保存在内存中吗?)。此外,SQL 查询优化器可能有更多关于列基数的信息,并且能够更有效地执行,因此总体上比您仅仅基于逐个检查更快的 Java 代码执行得更快。
另一方面,还要考虑代码的可维护性。有些事情最好留给 SQL,即使它们这样慢一点。
如果您已经将所有内容都保存在内存中,我的猜测是过滤列表将比对数据库进行进程间调用更快,尤其是对于如此少量的行。
但是首先将完整列表放在内存中似乎很奇怪。数据库速度很快,可以在您需要时返回您想要的数据。在内存中缓存这些小表的内容可能会使您的应用程序更加复杂,而不会显着提高速度。我会尽量让应用程序保持无状态,除非您遇到性能问题并且您证明缓存表内容可以解决问题。