Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j/Cypher简单查询索引扫描不';行不通_Neo4j_Cypher_Graph Databases - Fatal编程技术网

Neo4j/Cypher简单查询索引扫描不';行不通

Neo4j/Cypher简单查询索引扫描不';行不通,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,我有一个简单的节点User,它具有UserId属性,该属性具有唯一的约束设置 我开始分析我的查询,并注意到每次我通过UserIdNodeByLabelScan而不是NodeUniqueIndexSeek对User节点执行匹配时 我试过下面最简单的匹配 match(u:User{UserId:“id”})返回u,索引扫描不起作用 如果我显式地指定索引,一切正常 match(u:User{UserId:“id”})使用索引u:User(UserId)返回u 任何人都可以澄清为什么会发生这种情况。Cy

我有一个简单的节点
User
,它具有
UserId
属性,该属性具有唯一的约束设置

我开始分析我的查询,并注意到每次我通过
UserId
NodeByLabelScan而不是NodeUniqueIndexSeek对
User
节点执行匹配时

我试过下面最简单的匹配

match(u:User{UserId:“id”})返回u
,索引扫描不起作用

如果我显式地指定索引,一切正常

match(u:User{UserId:“id”})使用索引u:User(UserId)返回u


任何人都可以澄清为什么会发生这种情况。

Cypher将默认使用
NodeUniqueIndexSeek
,如果您有一定数量的相同标签的节点,在2.2.5版本中,如果我记得的话,它是从703个节点开始触发的


在这个树状结构下面,使用索引或标签索引不会提高查询的性能。

您有多少个用户节点?可能是基于成本的查询规划器认为/知道只有很少的标记节点,因此使用索引没有任何好处。您可以尝试使用基于规则的规划器(将CYPHER planner=规则前置到CYPHER查询)吗?在我的例子中,对于90k+节点,尽管我有唯一的约束,neo4j使用nodebylabelscan并使用属性进行筛选。这反过来又增加了很多时间。如何摆脱LabelScan最好的方法是共享您的查询计划,neo4j默认情况下每个模式只使用一个索引,您可以强制使用索引