java - 您多久编写一次新的 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数据库
解决方案
您希望 RDBMS 在查询大型表时完成繁重的工作。显然,始终将 PreparedStatement 与参数一起使用,并在需要时使用索引或执行连接。
对于小型数据集(即您的 20 行示例),在 Java 代码中执行过滤/处理是可以接受的,有时可能是一种优势,因为您可以让不同的 Java 方法使用一个查询。
我会(而且我已经)采用混合方法,当性能差异明显时,可以选择稍后使用专用 SQL 查询重构内存中 Java 过滤。
推荐阅读
- javascript - 在组件的根目录中提供服务时如何监视服务方法
- python - PyInstaller 和 Google Vision - 转换时出错
- vue.js - 如何访问计算的状态变量?
- php - 如何使用 2 个特定键的值对多维数组进行排序
- sql - 从每个产品类别购物的客户;他们在 SQL Server 项目中平均购买了多少产品类别?
- security - Microsoft Graph - 如何使用安全警报“文件删除量异常”获取关联文件
- java - 工具栏在创建时自动显示后退箭头
- azure - Azure 应用程序网关 ARM 模板问题与 backendHttpSettingsCollection 中的 pickHostNameFromBackendAddress 和主机名
- angular - Dockerized Angular前端无法访问dockerized python后端
- azure - azure管道如何从jenkins服务器触发构建并将文件从自托管linux代理复制到托管代理并在托管代理上构建