当前位置: 首页 > 面试题库 >

PostgreSQL查询上的大型ResultSet

华宣
2023-03-14
问题内容

我正在对PostgreSQL数据库中的表运行查询。该数据库位于远程计算机上。该表具有约30个使用postgresql
分区功能的子表。

该查询将返回一个很大的结果集,大约有180万行。

在我的代码中,我使用spring
jdbc支持,即方法JdbcTemplate.query,但未调用我的RowCallbackHandler。

我最好的猜测是postgresql
jdbc驱动程序(我使用版本8.3-603.jdbc4)在调用代码之前在内存中累积了结果。我以为fetchSize配置可以控制它,但是我尝试了一下,没有任何变化。我这样做是作为postgresql手册推荐的。

当我使用Oracle XE时,此查询工作正常。但是由于分区功能(Oracle XE中不提供该功能),我试图迁移到postgresql。

我的环境:

  • PostgreSQL 8.3
  • Windows Server 2008企业版64位
  • JRE 1.6 64位
  • 春季2.5.6
  • PostgreSQL JDBC驱动程序8.3-603

问题答案:

为了使用游标检索数据,除了设置获取大小外,还必须设置ResultSet类型的ResultSet.TYPE_FORWARD_ONLY(默认值),并自动提交为false。这是您链接到的文档中引用的,但是您没有明确提及已执行了这些步骤。

注意PostgreSQL的分区方案。它确实会对优化器造成非常可怕的影响,并可能导致本应避免的大量性能问题(取决于数据的具体情况)。无论如何,您的行只有180万行吗?只要有适当的索引,就没有理由只需要基于大小对其进行分区。



 类似资料:
  • 主要内容:SELECT 语句中的子查询使用,INSERT 语句中的子查询使用,UPDATE 语句中的子查询使用,DELETE 语句中的子查询使用子查询或称为内部查询、嵌套查询,指的是在 PostgreSQL 查询中的 WHERE 子句中嵌入查询语句。 一个 SELECT 语句的查询结果能够作为另一个语句的输入值。 子查询可以与 SELECT、INSERT、UPDATE 和 DELETE 语句一起使用,并可使用运算符如 =、<、>、>=、<=、IN、BETWEEN 等。 以下是子查询必须遵循的几个

  • 问题内容: 我有一张桌子,上面有我所有顾客购买的东西。我想选择上周(从周日开始的一周)中的所有条目。 我已经试过了: 但是我得到了上周的数据,包括本周的数据,我只想要上周的数据。 如何只获取上周的数据? 问题答案: 此条件将返回上周日至周六的记录: 有一个例子: 在对@ d456的回答中: 在间隔的两端不使用星期日的午夜吗? 没错,包括间隔两端的周日午夜。要在间隔结束时排除周日的午夜,必须使用运算

  • 我用来计算这个月的时间,这在两个表中很常见,即和。 但在表2中,我有日期和月份。 我还在表1上创建了一个索引。如果我只写相同的查询表1,我得到的结果在1000ms内。 我取值的总和,并使用左连接组合结果。 问题是这样的。 解释问题: 目前,我在表1中大约有500k行。 每天我都会更新表,将大约3到4k记录更新到表1。 查询一直在运行。 我没有得到任何结果。 谁能告诉我哪里出了问题吗?

  • 我有一个需要50秒的查询 security_tasks中的记录=841321 relations中的记录=234254 我能做些什么让它快一点,比如快1秒或2秒 有什么想法吗?

  • 我有一个只有2个文档的mongodb数据库。两者具有相同的结构: 小文档在消息中有0个对象,大文档有1000个。我数了数这两份文件上的标牌:小:28000大:450000 我使用nodeJS和常规mongodb驱动程序访问文档,并且我将索引设置为“general.sid”。 现在我要他们的将军提供文件。而且这两个文档的时间差别很大!我接收文档,进行一些计算并更新文档。 我打印接收和更新文档之前和之

  • 问题内容: 在PostgreSQL 9.3.4上,我有一个称为“ person”的JSON类型列,并且其中存储的数据为format 。我想检索索引为0的狗的品种。这是我运行的两个查询: 不起作用 作品 为什么必须进行类型转换?效率低下吗?我是在做错什么,还是对Postgres JSON支持有必要? 问题答案: 这是因为运算符将JSON数组元素获取为文本。您需要强制转换以将其结果转换回JSON。 您