删除节点后 Neo4j 范围索引 BTREE 如何工作

问题描述 投票:0回答:1

我有一个查询,每次运行时都会匹配几个节点。这个查询在我的程序中运行了大约 50,000 次。之后,我设计了一个循环来删除我在单独的查询中匹配的节点。每个匹配和删除查询都是在运行大约 50,000 次的代码块中。考虑到我已经为用于查询节点的属性上的所有节点标签创建了索引,查询的存在将如何影响性能。 在亲自测试之后,我发现与在创建索引之前运行程序相比,在创建索引之后程序运行所需的时间更长。 这可能吗? 索引不应该提高性能吗?

我已经读到范围索引在内部使用 BTree 工作。每次删除后 BTree 都会修改吗? 这就是时间增加的原因吗?

indexing neo4j neo4j-java-api
1个回答
0
投票

如果我理解正确的话,您正在测量匹配节点的

MATCH
DELETE
 的性能。正如文档
here中所述,这应该不足为奇,因为索引会减慢写入速度:

较慢的写入查询:添加索引会影响写入查询的性能。这是因为索引会随着每个写入查询而更新。如果系统需要快速执行大量写入,则在受影响的数据实体上建立索引可能会适得其反。换句话说,如果写入性能对于特定用例至关重要,则仅在读取所需的位置添加索引可能会更有利。

© www.soinside.com 2019 - 2024. All rights reserved.