我们在Postgres DB中有一个表,其中列出了两个整数,比如说i1,i2和一个double,比如d .
出于某种原因,我们需要此表中所有行中的这些字段的所有值 . 另外,我们需要使用Java来做这件事,不要问我为什么 .
我正在努力寻找最有效的方法 . 当然,我可以使用查询执行Java语句
SELECT i1, i2, d FROM mytable;
然后迭代ResultSet . 我担心这会给数据库带来负担 .
表可能包含数百万行(绝对小于10米),我们只对这三个字段感兴趣 .
如果有一个主列主键,我可以轻松编写一个光标调用,就像这样
SELECT i1, i2, d FROM mytable where primarykey > ?;
但该表没有单列主键 .
虽然i1和i2保证是唯一的,但table没有索引,并且鉴于这只是一次性活动,团队中的任何人都不太可能对创建索引感兴趣 .
没有索引,我怀疑选择所有行实际上比i1和i2的订购便宜,然后使用这些来编写一个光标 .
这样做效率最高,问题最少的方法是什么?
1 回答
只需运行select即可获取所有行 . Postgres绝对可以解决这个问题 .
遗漏任何
order by
以使处理更便宜 .您应该关注的唯一问题是驱动程序的内存消耗 . 默认情况下,Postgres驱动程序在从
executeQuery()
调用返回之前在内存中缓冲 all 行 .您可能需要将驱动程序配置为不执行此操作 . 这在驱动程序手册中有所介绍:
https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor