我知道复杂的SQL查询可能比在Java中处理列表操作更少的内存开销,但是它更快吗?
我使用JPA和SpringFramework来处理我的数据库。
我是这样做的:
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,我应该如何使用我当前使用的框架呢?
发布于 2018-06-20 18:40:59
在我看来,复杂的sql查询就像一个简单的where子句。假设您的"station“是一个简单的字符串属性,并且您使用的是spring-data-jpa,那么解决方案可能就是这么简单:
为您的沉淀实体定义存储库:
public interface PrecipitationRepository extends JpaRepository<Precipitation, Long> {
List<Precipitation> findByStation(String station);
}
然后,您可以注入并使用存储库来查找具有所需工作站的沉淀:
List<Precipitation> results = precipitationRepository.findByStation("your station");
...further processing
有关如何定义Spring数据存储库的更多信息,请查看Spring Data JPA Reference
发布于 2018-06-20 05:10:47
确定的最佳方法是测量它,然而,从SQL查询接收数据的大部分时间都是在传输网络数据。
任何类型的SQL引擎都经过了高度优化,可以有效地选择数据,大多数SQL服务器都提供了各种工具来帮助您以各种方式优化查询。
此外,根据您的查询,在获取所有内容的查询过程中可能会持有更多的锁,这可能会阻止其他并发操作高效运行。同样,大多数数据库引擎(不包括SQLite)都是为并发事务设计的,但当这些事务在行或数据页上不重叠时工作得最好。
因此,一般而言,我期望的策略是检索所有内容,然后对其进行过滤,其效率低于让SQL引擎执行其设计的目的。
https://stackoverflow.com/questions/50936948
复制相似问题