java - 如何提高PostgreSQL数据库中海量数据的查询效率?

标签 java postgresql jdbc postgresql-performance

我有一个包含 12 亿行 的 PostgreSQL 数据库,试图制作一个一次查询一百万行的应用程序,并可以选择查询更大的间隔。 起初我只是轻松地查询一个百万到一千万的数据库;
现在我正在使用 OFFSET 查询大型数据库,ResultSet 需要很长时间才能生成。

   // ...
   stmt.setFetchSize(100000);
   ResultSet rs = stmt.executeQuery("SELECT mmsi, report_timestamp, position_geom, ST_X(position_geom) AS Long, "
                        + "ST_Y(position_geom) AS Lat FROM reports4 WHERE position_geom IS NOT NULL ORDER by report_timestamp ASC LIMIT "
                        + limit + " OFFSET " + set); 

所以 ORDER BY 可能会占用我的执行时间,但是对信息进行排序会让以后的事情变得更容易。有没有更有效的方法来按间隔查询行?

最佳答案

对于这个查询:

SELECT mmsi, report_timestamp, position_geom, ST_X(position_geom) AS Long, "
                        + "ST_Y(position_geom) AS Lat
FROM reports4
WHERE position_geom IS NOT NULL
ORDER by report_timestamp ASC;

您应该能够在表达式上使用索引:

CREATE INDEX idx_reports4_position_ts ON reports4((position_geom IS NOT NULL), report_timestamp)

该索引应该直接用于查询。

关于java - 如何提高PostgreSQL数据库中海量数据的查询效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31516507/

相关文章:

java - 哈希机制真的安全吗?

java - 观察列表中删除的对象

node.js - Sequelize 中的内部连接查询引用多个表

multithreading - 如何管理服务器上的数据库连接?

postgresql - 无法为 Keycloak 配置 postgreSQL 数据源

JavaFX。将多个带有图像的标签添加到 Pane

java - get() 和 addListenerForSingleValueEvent 有什么区别?

PHP检查登录验证

postgresql - 一个 INSERT 多个 SELECT

java - 无法从 Unix 机器连接到 Windows 服务器上的 Access 数据库