我应该索引所有数据吗?如何在Memgraph中启用它



我在mySQL数据库中使用过索引,我知道索引是如何工作的。我使用索引从数据库中获得更好的性能。我知道,如果索引了太多的数据,可能会有负面影响。Memgrah是一个图形数据库,它的情况如何?数据可以编入索引吗?哪些数据应该编入索引?

Memgraph不会自动为标记的数据建立索引。如果要优化通过标签获取节点的查询,则需要创建索引。

当您运行查询时,您希望尽快得到结果。在最坏的情况下,执行查询时,需要检查所有节点以查看是否匹配。

通过启用索引,这个过程可以更快。执行查询时,引擎首先检查是否存在索引。索引存储有关某些类型数据的附加信息,以便检索索引数据变得更加高效。索引基本上以不同的方式存储数据,即用键对数据进行分区。例如,如果在标签上设置索引,则查询MATCH (:Label)不必显式检查每个节点。您只需要检查放置在";搁架";。每个";"架子";具有具有特定标签的节点。数据不被复制或复制到";搁架";。实际上,您创建了一个到这些节点的内存映射,不需要在其他任何地方查找它们。

索引有一些缺点,因此仔细选择正确的数据来创建索引很重要。索引的缺点是:

  • 需要为每个索引和
  • 减慢对数据库的写入操作

对所有内容进行索引不会提高数据库速度。索引中的结构在修改或插入新节点时动态更新。创建新节点后,需要将其分配给索引组。这样的索引节点将更快地从数据库中检索出来。

此外,对某些数据类型进行索引不会带来任何显著的性能提升,例如,对于布尔型,在最佳情况下,时间将减半。

索引可以应用于具有特定标签或标签和属性组合的数据。它们不是自动创建的,用户需要显式地创建它们。创建是使用特殊的CREATE INDEX ON :Label(property)语言构造完成的。

创建索引时,它会添加到索引注册表中。

Memgraph支持两种类型的索引:

  • 标签索引-使用Cypher查询创建它,例如CREATE INDEX ON :Person;
  • 标签属性索引-使用Cypher查询创建,例如CREATE INDEX ON :Person(age);

最新更新