首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >List.removeIf()比复杂的SQL查询快吗?

List.removeIf()比复杂的SQL查询快吗?
EN

Stack Overflow用户
提问于 2018-06-20 05:06:10
回答 2查看 82关注 0票数 0

我知道复杂的SQL查询可能比在Java中处理列表操作更少的内存开销,但是它更快吗?

我使用JPA和SpringFramework来处理我的数据库。

我是这样做的:

代码语言:javascript
复制
TypedQuery<Precipitation> query = entityManager.createNamedQuery("query_find_all_Precipitiation", Precipitation.class);
Predicate<Precipitation> precipPredicate = p -> p.getStation() != station;
List<Precipitation> results = query.getResultList();
results.removeIf(precipPredicate);
//Use results here

我之所以这样做,是因为我对数据库的工作还很陌生,而且我对SQL也不是很在行,但我知道如何操作java列表。

如果内存不是问题,这是一种快速的方法,还是应该在查询中使用where?

如果我应该在我的查询中使用where,我应该如何使用我当前使用的框架呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-20 18:40:59

在我看来,复杂的sql查询就像一个简单的where子句。假设您的"station“是一个简单的字符串属性,并且您使用的是spring-data-jpa,那么解决方案可能就是这么简单:

为您的沉淀实体定义存储库:

代码语言:javascript
复制
public interface PrecipitationRepository extends JpaRepository<Precipitation, Long> {

    List<Precipitation> findByStation(String station);
}

然后,您可以注入并使用存储库来查找具有所需工作站的沉淀:

代码语言:javascript
复制
List<Precipitation> results = precipitationRepository.findByStation("your station");
...further processing

有关如何定义Spring数据存储库的更多信息,请查看Spring Data JPA Reference

票数 0
EN

Stack Overflow用户

发布于 2018-06-20 05:10:47

确定的最佳方法是测量它,然而,从SQL查询接收数据的大部分时间都是在传输网络数据。

任何类型的SQL引擎都经过了高度优化,可以有效地选择数据,大多数SQL服务器都提供了各种工具来帮助您以各种方式优化查询。

此外,根据您的查询,在获取所有内容的查询过程中可能会持有更多的锁,这可能会阻止其他并发操作高效运行。同样,大多数数据库引擎(不包括SQLite)都是为并发事务设计的,但当这些事务在行或数据页上不重叠时工作得最好。

因此,一般而言,我期望的策略是检索所有内容,然后对其进行过滤,其效率低于让SQL引擎执行其设计的目的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50936948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档