Neo4j 4.x 中的索引
本节包含有关不同版本 Neo4j 中索引的必要信息。
索引会自动更新到最新的索引提供程序并进行重建。唯一的例外是以前对单属性字符串使用 Lucene 的 3.5 版本索引。它们会被升级到一个对这些属性使用 Lucene 的回退版本,并且必须进行重建。有关创建、使用和删除 b-tree 索引的详细信息,请参阅 Cypher® 手册 4.0 → 搜索性能索引。
|
|
索引提供程序变更
下表提供了有关索引提供程序映射的详细信息
| 3.5 版本中的索引提供程序 | 4.x 版本中的索引提供程序 |
|---|---|
|
|
|
|
|
|
|
|
内存分配
根据之前使用的索引提供程序,索引的升级可能会改变内存利用率的分布。在拥有大量索引的数据库中,可能已经为 Lucene 预留了大量的内存。因此,建议在迁移前后运行 neo4j-admin memrec --database,并根据结果调整内存设置。可能需要将部分分配给 Lucene 的内存重新分配给页缓存 (page cache)。有关内存如何分配和使用的详细说明,请参考 操作手册 → 内存配置,特别是 操作手册 4.0 → 容量规划。
属性大小限制
在 3.5 到 4.x 之间,b-tree 索引中键(属性)的大小限制发生了一些变化。这些变更仅适用于在 3.5 版本中使用 lucene-1.0 或 lucene+native-1.0 索引提供程序且包含大字符串或大数组的索引。
| 索引和属性类型 | lucene-1.0 |
lucene+native-1.0 |
lucene+native-2.0 |
native-btree-1.0 |
|---|---|---|---|---|
单属性字符串 |
~32kB |
~32kB |
~4kB |
~4kB |
单属性数组 |
~32kB |
~32kB |
~4kB |
~4kB |
多属性 |
每个属性 ~32kB |
每个属性 ~32kB |
属性组合后 ~4kB |
属性组合后 ~4kB |
| 索引和属性类型 | lucene+native-3.0 |
native-btree-1.0 |
|---|---|---|
单属性字符串 |
~32kB |
~8kB |
单属性数组 |
~8kB |
~8kB |
多属性 |
属性组合后 ~8kB |
属性组合后 ~8kB |
|
在 4.x 中,没有变通方法可以索引大于 ~8kB 的数组或多属性。有关达到此属性大小限制时会发生什么情况的更多信息,请参阅 操作手册 4.0 → 键大小限制。 |
显式索引 (Explicit indexes)
从 4.0 版本开始,显式索引的支持已被移除,该功能已被全文索引所取代。有关详细信息,请参阅 Cypher 手册 4.0 → 支持全文搜索的索引。
Token 查找索引
Neo4j 4.3 引入了一种新的索引,即 token 查找索引。该索引在 4.3 及更高版本创建的所有数据库中默认存在,适用于节点标签和关系类型。有关更多信息,请参阅 操作手册 4.3 → Token 查找索引。
节点查找索引是从标签扫描存储 (label scan store) 演变而来的,后者长期以各种形式存在。将标签扫描存储转变为索引有很多优点,但必须注意,与标签扫描存储不同,节点查找索引是可以删除的。
|
节点查找索引是数据库中最重要的索引,它极大地提高了 Cypher 查询、核心 API 操作以及其他索引填充的性能。删除此索引会导致大多数工作负载的性能严重下降。因此,在删除之前请仔细考虑后果。 相应地,任何列出并删除所有索引的索引清理脚本也包含了节点查找索引,因此在使用时应极其谨慎。 |