0

我有一个用 Java 编写的应用程序,我在其中访问 SQL 数据库中的数据。在一些特定的场景中,我能够查询数据库以获取信息,或者我可以在 java 中编写代码,以根据范围内的对象获取我需要的数据。我的问题是,尽可能使用查询或编写java代码来实现所需的效率更高。也许一个特定的场景会有所帮助。

我有一个场景,我查询数据库以获取列表。之后,我编写了一些 JAVA 代码以从列表中仅选择其中一个特定对象。在这种情况下,我使用 java 来建立我需要的对象。

另一种方法是查询数据库并在我的查询中将两个表连接在一起,只返回一个需要的对象。在这种情况下,我将使用查询语言来建立我需要的对象。

任何提示或建议将不胜感激,谢谢。

4

4 回答 4

3

这样想。SQL queries are much closer to data比java代码。此外java需要加载所有数据来执行过滤。如果你能写出高效的 SQL,SQL 总是比 Java 好。

在涉及大量计算和业务逻辑的场景中,Java 过滤更可取。与数据库相比,我个人更喜欢用 Java 编写复杂的业务逻辑。

于 2012-10-19T17:35:39.763 回答
1

你的问题有一些变幻莫测,所以很难具体。

一般而言,过早优化不是可行的方法。您最好以最直接的方式编写代码,然后使用生成的信息来决定哪些改进是必要的。

假设 #1

SQL 查询的结果列表很大。在这种情况下,最好使用 SQL 来限制结果。

假设 #2

结果列表很小。可能不会对性能产生太大影响,但事后使用 Java 操作列表会使代码更加复杂。

假设 #3

上述任何一种情况,但基础数据不会经常更改,或者经常被请求。您可以缓存数据,在 Java 中制作副本并操作这些副本以对其进行排序、过滤等。在某些情况下可能会更快,但会导致代码更复杂。

假设 #4

结果列表不是很大,而是复杂且执行缓慢的查询的结果。也许缓存结果,当您需要数据的变体(过滤或排序)时,使用 Java 复制缓存列表并对列表副本进行排序和/或过滤。或者在数据库中创建一个物化视图并查询它。

于 2012-10-19T17:43:02.417 回答
1

查询数据库很快,因为数据库就是在这方面设计的。此外,您只会在您的 java 代码中获得所需的信息,这样您就不需要任何额外的内存来存储其他不可用的对象。

于 2012-10-19T17:35:35.113 回答
1

通常情况下,数据库处理查询比使用 Java 过滤列表更快。使用应用程序代码的唯一好时机是过滤要求太复杂以至于无法用查询语言表达(极不可能),或者最终必须多次查询数据库才能获得所需的内容。

这两个问题都可以通过坐下来专注于设计智能查询来解决,再次导致数据库胜出。

于 2012-10-19T17:35:49.013 回答