【问题标题】:Count duplicate rows in H2 database计算 H2 数据库中的重复行
【发布时间】:2020-08-21 10:24:03
【问题描述】:

我有一个 H2 数据库,它有 120m 行和 4 列,只有整数值。我正在尝试计算所有重复的行。

这是选择语句:

SELECT a, b, c, d, COUNT(*) AS dupes FROM t1 GROUP BY a, b, c, d HAVING COUNT(*) > 1;

当我在大约 4m 行的数据库中使用此语句时,它可以正常工作。 在具有 >4m 行的数据库中,它会引发 ArrayOutOfBounds 异常。 在行数超过 10m 的数据库中,我收到 OutOfMemoryError(增加 Java 堆空间没有帮助)或物理内存不足错误。

如何改进 select 语句?我怎样才能使它更有效地处理 >10m 行和 为什么它会抛出 >4m 行的 ArrayOutOfBounds 异常?

【问题讨论】:

    标签: java sql count duplicates h2


    【解决方案1】:

    不幸的是,H2 需要大量内存用于结果中包含许多行的分组查询,除非存在与 GROUP BY 子句兼容的索引。如果你没有足够的内存,你需要定义这样的索引。

    CREATE INDEX T1_ABCD_IDX ON T1(A, B, C, D);
    

    这种AIOOBE 异常看起来像一个错误,但解决方法是一样的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-24
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 2010-11-15
      • 2021-06-30
      • 2013-07-28
      • 2018-01-09
      相关资源
      最近更新 更多