H2:由于列上的索引,插入很慢

时间:2014-11-25 12:45:03

标签: hash indexing h2

我正在使用h2数据库来存储数据。 每条记录在数据库中必须是唯一的(在时间戳,名称,消息,...的组合中,表格中没有两次出现,因此是唯一的)。因此,表中的一列是记录中数据的哈希值。为了加快搜索记录是否已存在,我在哈希列上创建了一个索引。实际上,使用给定哈希搜索记录非常快。 但问题是:虽然在开始时插入10k记录足够快(大约需要一秒钟),但在数据库中已有一百万条记录(需要一分钟)时,它会变得非常慢。这可能是因为需要将新哈希值集成到现有索引b-tree中。

有没有办法加快速度,还是有更好的方法来确保表中数据记录的唯一性?

编辑:更具体: 让我们说我的记录是具有以下字段的交易:

时间戳,类型,发件人收件人,金额,邮件

事务应该只在表中出现一次,因此在插入新事务之前,我必须检查事务是否已经在表中。由于所有字段的sha 256哈希值都是唯一的,因此我的想法是添加一列“#hash”#be;放入字段哈希的表。在插入新记录之前,我计算字段的哈希值并查询表中的哈希值。

3 个答案:

答案 0 :(得分:0)

指数有其自己的头脑。如果你有一个表格,你将有很多插入,我建议避免索引,因为它已经超过哈希。

我可以知道你是什么意思 - >表中的一列是记录中数据的哈希值

你可以创建一个唯一的键约束(这里它将是所有这3个列中的复合键),让我知道这些要求,也许我们可以为你提供一个更简单的方法来做到这一点:)

Danyal

答案 1 :(得分:0)

Man,这可能不是查询所有记录,检查它们是否重复,然后插入新行:)的好方法。一旦你继续前进,开销就会随着记录数量的增加而增加。

在这些字段的组合上创建唯一键约束(检查http://www.h2database.com/html/grammar.html),您不需要计算哈希值,数据库将处理哈希事物。只是尝试添加重复记录,您将获得异常,捕获异常并将错误消息显示为重复插入..

创建唯一索引后,它将不允许您插入任何重复记录。这是非常安全和安全的。

答案 2 :(得分:0)

索引随机分布的数据对性能不利。一旦索引中的条目多于缓存中的条目,则更新索引将变得非常慢,特别是在使用硬盘时。这是因为硬盘上的搜索非常慢。这与数据的随机分布相结合,将导致非常糟糕的性能。对于固态磁盘,它会更好一点,因为随机访问读取速度更快。