H2(文件)删除性能

时间:2016-07-06 07:10:44

标签: java database h2

在AUTO-SERVER模式下,基于文件的H2数据库遇到了一些有问题的性能问题。我使用H2版本1.3.174。该数据库包含一个包含5列的表。其中一列是CLOB,(平均而言)每行包含1 KB的文本数据。在单线程测试运行中,我插入了800,000行,这需要409秒 - 对我来说还可以。我已按照以下步骤执行了第二次测试:

  1. 从数据库加载前100条消息。消息顺序通过主键(NUMBER)值建立。
  2. 使用以下语句删除这100条消息:DELETE FROM mytable WHERE id IN(...);
  3. 这将在删除790,000行数据库之前完成。在我的真实场景中,步骤1和2之间会涉及一些处理。第二次测试运行需要8.5小时,在空载的快速机器上!我观察到在删除过程中,H2创建了名为" mydb.1978734278.38.temp.db"的临时文件,其大小在24到1,300 MB之间快速变化。

    这是预期的行为吗?我有什么想法可能做错了吗?谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

我正在用我的发现回答我自己的问题:

  1. 主要问题是SELECT语句,这是由于缺少索引。一旦适当的INDEX到位,SELECT / DELETE测试运行只需要2分钟。
  2. 使用CLOBS或LONGVARBINARY而不是VARCHAR时似乎存在空间问题:使用后者时文件大小减少了一半。