我们在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保证是唯一的,但表没有索引,并且鉴于这只是一次性活动,团队中的任何人都不太可能对创建索引感兴趣。
没有索引,我怀疑选择所有行实际上比通过i1和i2订购更便宜,然后使用这些来编写一个光标。
这样做最有效,问题最少的方法是什么?
答案 0 :(得分:0)
只需运行select即可获取所有行。 Postgres绝对可以解决这个问题。
忽略任何order by
以降低处理成本。
您应该关注的唯一问题是驱动程序的内存消耗。默认情况下,Postgres驱动程序在从executeQuery()
调用返回之前缓冲内存中的所有行。
您可能需要将驱动程序配置为不执行此操作。这在驱动程序手册中有所介绍:
https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor