相关疑难解决方法(0)

有没有办法显示密码执行计划?

我已经看到了一个主题(了解Neo4j Cypher Profile关键字和执行计划),其中提到了profile关键字.

我无法在Neo4j 2.0.0RC1社区中使用它.

彼得写道,它没有完全实现.

会不会得到支持?

我的意思是,在调整查询时观察计划的变化会很有趣......

neo4j cypher

14
推荐指数
2
解决办法
6118
查看次数

如何使用多节点匹配优化Neo4j Cypher查询(笛卡尔积)

我目前正在尝试合并三个数据集以进行分析.我正在使用某些常用字段来建立数据集之间的连接.为了创建连接,我尝试使用以下类型的查询:

MATCH (p1:Person),(p2:Person)
WHERE p1.email = p2.email AND p1.name = p2.name AND p1 <> p2 
CREATE UNIQUE (p1)-[IS]-(p2);
Run Code Online (Sandbox Code Playgroud)

可以类似地写成:

MATCH (p1:Person),(p2:Person {name:p1.name, email:p1.email})
WHERE p1 <> p2 
CREATE UNIQUE (p1)-[IS]-(p2);
Run Code Online (Sandbox Code Playgroud)

不用说,对于具有大约100,000个Person节点的数据库,这是一个非常慢的查询,特别是假设Neo4j不并行处理单个查询.

现在,我的问题是是否有更好的方法在Neo4j中运行此类查询.我有至少8个CPU核心专用于Neo4j,只要单独的线程不会通过锁定彼此所需的资源来占用.

问题是我不知道Neo4j如何构建其Cypher执行计划.例如,假设我运行以下测试查询:

MATCH (p1:Person),(p2:Person {name:p1.name, email:p1.email})
WHERE p1 <> p2 
RETURN p1, p2
LIMIT 100;
Run Code Online (Sandbox Code Playgroud)

尽管有LIMIT条款,Neo4j仍然需要相当长的时间来交付结果,这让我想知道即使是这样有限的查询,Neo4j在考虑LIMIT语句之前是否产生了整个笛卡尔积表.

我感谢任何帮助,无论是解决这个特定问题,还是让我了解Neo4j如何建立Cypher执行计划(以及如何优化查询).传统的Lucene索引可以在这里提供任何帮助吗?

graph query-optimization cartesian-product neo4j cypher

5
推荐指数
1
解决办法
1808
查看次数