【问题标题】:Most efficient way of retrieving data from large number of tables (20-30)从大量表中检索数据的最有效方法 (20-30)
【发布时间】:2019-12-12 12:57:19
【问题描述】:

我需要从我的 java 应用程序中的大约 28 个表中检索数据,然后将其转储到 Elastic Search。我需要使用 JDBC 来查询和从数据库中获取数据(在我的例子中是 PostgreSQL。)连接是获取所有数据的最佳方式吗?

从 SQL 和 PostgreSQL 的角度来看(我不了解 PostgreSQL 的一些特性)检索数据最有效的方法是什么?

添加,一个表是主表。其他表是“连接”表,只有两列包含主表中的主键,另一列充当另一个表的外键,其中包含更多我不关心的数据。

【问题讨论】:

  • 通常,检索数据最有效的方法是编写一个SELECT 语句来获取您想要的数据。如果其中包含JOINs,那就这样吧。
  • 那么,对所有 28 个表执行连接是理想的吗?
  • 这在很大程度上取决于您需要这些数据的形式。如果您需要原始表数据,最好一张一张转储表。
  • @LaurenzAlbe - 所以将主表与 28 个表中的每一个一个一个地连接起来,然后进行转储..重复的数据库命中不会很昂贵吗?
  • 没有。加入 28 个表将比运行 28 个单独的选择更昂贵。

标签: sql postgresql join jdbc


【解决方案1】:

在 PostgreSQL 中加入那么多表需要很长时间,不仅在执行阶段,而且在计划阶段。查询规划器将需要考虑许多不同的候选计划,同时从所有相关表中提取统计信息。还有from_collapse_limitjoin_collapse_limit -- these limits (documentation) 导致查询规划器自己重新安排查询,并不总是理想的。

在将数据发送到 ElasticSearch 之前,您最好提取数据并利用您的编程专业知识消化数据。

披露:我为EnterpriseDB (EDB)工作

【讨论】:

  • 谢谢。我决定在应用程序中使用休眠来管理大量的表。对象图会很大,但不会那么复杂。
猜你喜欢
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多