您多久编写一次新的 SQL 查询或尝试使用现有的查询? [关闭]

Posted

技术标签:

【中文标题】您多久编写一次新的 SQL 查询或尝试使用现有的查询? [关闭]【英文标题】:How often do you write a new SQL queries or do you try to use existing ones? [closed] 【发布时间】:2020-05-02 17:10:49 【问题描述】:

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

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

例如:

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数据库

【问题讨论】:

你考虑过使用像 Hibernate 这样的 ORM 吗? 如果您要一遍又一遍地使用查询但参数不同,我会使用存储过程。 @azurefrog 当前项目不使用 Hibernate。但是如果我使用 Hibernate,问题会是一样的。 @Alex 我们也用程序。只是想想,经常为特殊情况更改和添加参数会变成难以维护和不清楚的代码吗?同样的问题是这些查询是过程。修改现有的、添加新的或使用现有的进行后端处理? 我正在写一个答案,建议数据库视图以及可能的 JPA 实体 + QueryDSL(或一组普通的 JDBC 查询),但在我设法提交答案之前,过分热心的常客就关闭了这个问题。简而言之,这取决于。 【参考方案1】:

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

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

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

【讨论】:

以上是关于您多久编写一次新的 SQL 查询或尝试使用现有的查询? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Firefox 的 MediaRecorder 接口仅每两秒提供一次新的视频数据

将 MutationGroup 流式传输到 Spanner

如何在现有的 Hql 或 SQL 查询中应用“With UR”子句?如何在我的查询为字符串格式的 Java 文件中附加它

新的 Flyway 迁移破坏了现有的 jOOQ 生成的代码

SQL SERVER(MSSQLSERVER服务不能启动怎么办?

查询编辑器编写并执行Transact-SQL程序有啥方法