我有一个查询,每次运行时都会匹配几个节点。这个查询在我的程序中运行了大约 50,000 次。之后,我设计了一个循环来删除我在单独的查询中匹配的节点。每个匹配和删除查询都是在运行大约 50,000 次的代码块中。考虑到我已经为用于查询节点的属性上的所有节点标签创建了索引,查询的存在将如何影响性能。 在亲自测试之后,我发现与在创建索引之前运行程序相比,在创建索引之后程序运行所需的时间更长。 这可能吗? 索引不应该提高性能吗?
我已经读到范围索引在内部使用 BTree 工作。每次删除后 BTree 都会修改吗? 这就是时间增加的原因吗?
如果我理解正确的话,您正在测量匹配节点的
MATCH
和 DELETE
的性能。正如文档here中所述,这应该不足为奇,因为索引会减慢写入速度:
较慢的写入查询:添加索引会影响写入查询的性能。这是因为索引会随着每个写入查询而更新。如果系统需要快速执行大量写入,则在受影响的数据实体上建立索引可能会适得其反。换句话说,如果写入性能对于特定用例至关重要,则仅在读取所需的位置添加索引可能会更有利。