首页 > 解决方案 > 您多久编写一次新的 SQL 查询或尝试使用现有的查询?

问题描述

我还没有找到类似的问题。我很想听听建议和意见。

很明显,最好有一个只返回您需要的信息的查询。如果我们使用更大的数据库,我们通常已经对具有不同标准的每个表进行了大量查询,简单的或复杂的或动态的。

例如:

SELECT * FROM transaction tr WHERE tr.progress_date = '?'; -- about 20 rows

但是,在某些时候我们需要来自数据库的特定信息。你总是为这种情况写一个新的查询吗?例如:

SELECT SUM(tr.amount) FROM transaction tr WHERE tr.progress_date = ? AND tr.sender = ?;

或者使用一些现有的(如果相似)并且不返回更多数据,另外在后端进行额外的简单过滤或搜索?例如:

SELECT * FROM transaction tr WHERE tr.progress_date = '?'; -- about 20 rows

|
V

double sum = transactions.stream().mapToDouble(t -> t.getAmount()).sum();

请注意,它不是一个小型软件,并且经常会出现一种新情况,即仅针对一个特定情况需要一些信息。

假设数据没有缓存,是Oracle、Postgres或MySql数据库

标签: javac#sqldatabaseoracle

解决方案


您希望 RDBMS 在查询大型表时完成繁重的工作。显然,始终将 PreparedStatement 与参数一起使用,并在需要时使用索引或执行连接。

对于小型数据集(即您的 20 行示例),在 Java 代码中执行过滤/处理是可以接受的,有时可能是一种优势,因为您可以让不同的 Java 方法使用一个查询。

我会(而且我已经)采用混合方法,当性能差异明显时,可以选择稍后使用专用 SQL 查询重构内存中 Java 过滤。


推荐阅读