【问题标题】:PostgreSQL/JDBC reading over 100k lines with IN clause [duplicate]PostgreSQL/JDBC 使用 IN 子句读取超过 100k 行 [重复]
【发布时间】:2021-10-09 12:19:33
【问题描述】:

大家好! 我从一个文件中读取数据,然后我用它在 PG 中查询。 该文件包含大量行,这些行是记录的唯一字段(不是键)。

我需要从文件中读取从数据库中获取平均500k条记录

循环读取IN请求超过5000个值时,读取速度很慢。

我正在使用的请求的一个简单示例:

SELECT * FROM schema.table WHERE table.param IN ('p1', 'p2','more'.....)

在我的情况下,有没有更正确的方法来读取如此大量的数据?

感谢您的回答

附注我读到JDBC对IN子句的大小限制很短,否则会抛出异常

【问题讨论】:

  • 将文件加载到表中,完成数据库中的所有工作。
  • 别这样。将文件导入数据库并从那里开始

标签: java sql postgresql jdbc


【解决方案1】:

进一步了解 duffymo 的回答:

索引是数据库可以用来加快数据获取速度的特殊查找表。

索引可以帮助你加速 SELECT 语句和 WHERE 子句(这是你的情况),但它会减慢数据输入过程(即 UPDATE 和 INSERT 语句)。

注意:可以创建或删除索引,而不会影响数据。

如何添加索引

在这种情况下,允许重复值:

CREATE INDEX index_name
ON table_name (column1, column2, ...)

如何添加唯一索引

这里不允许重复值:

CREATE UNIQUE INDEX index_name
ON table_name (column1, column2, ...)

【讨论】:

    【解决方案2】:

    您在该列上有索引吗?我建议您执行 EXPLAIN PLAN 并查找 TABLE SCAN。如果您看到,请为您的查询添加索引。

    您对该列有 UNIQUE 约束吗?

    我认为 IN 子句中包含 5,000 个值的查询设计不当。

    【讨论】:

      猜你喜欢
      • 2013-03-30
      • 2021-02-23
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 2017-02-13
      • 2011-01-24
      • 2010-09-28
      相关资源
      最近更新 更多