【发布时间】:2020-10-10 20:28:45
【问题描述】:
我对 Java8 和 Oracle 有一个复杂的问题。我们的 Java8 API 负责从 Oracle DB 每次调用提供 1000 条记录。我们正在使用 JDBC Spring。进入数据库设计,我们有 2 个表。
- 商家: 身份证 |姓名 |和其他列 此表的总列数为 11
- 商家联系方式: 这是包含 3 种不同联系类型的商家联系信息的表格 所以,我们在这个表中每个商家有 3 行
- 商家关系: 此表保留有关 Merchant Id 和父 Merchant Id 的信息
我们的 API 需要提供所有属于请求的父商家 ID 的商家信息。
我们已经加入到 Oracle 存储过程中,并且我们也有索引。 当我们减少从 DB 返回的列数时,此 API 表现良好。 只要列数增加,API 性能就会下降。 要获取 1000 条记录,此 API 平均需要大约 2.5 秒。来自具有 1000 条记录的 DB 的较小信息集是否需要大约 500 毫秒 [良好的性能]
我们还在从 JDBC 到 Oracle 的数据读取操作期间定义了 fetch-size。 Oracle 版本是 12.x,API 是 Java Vertx
请提出建议。
【问题讨论】:
-
您的数据有多冗余(JOIN 会导致大量冗余)?获取所有 id,然后只获取一次数据可能会更快。
-
请参阅here 必须发布哪些信息(表结构、数据大小、执行计划)。 好消息是,如果您需要 2 多秒才能获得 1K 行,那么您有有很大的改进空间
-
我们已经加入 Oracle 存储过程 - 这是否意味着 循环一个游标 并 从循环中的其他表中获取行我>?
-
这里的加入很简单,第一次加入:有商家关系的商家,第二次加入:有商家联系的商家。我们需要执行的这些最小连接。
-
是的,我们需要在这里找到改进的范围。所以,我在这里寻找一些带有最佳实践指南的解决方案设计。
标签: java spring oracle performance vert.x