不用START语句,按标准改用MATCH语句后耗时严重
基于Neo4j建立了一个千万条边的数据库,结构为:(:Subject)-[:hasRole{scene:..., detail:...}]->(:Role)-[:hasPermission]->(:Permission)
,其中每个节点都有value和detail两个属性。每种节点各750个,所有关系共71m个。
现根据Subject节点的value和hasRole关系的scene属性查询存在关系的Permission节点,有以下两种Cypher语句查询方式:
MATCH (s:Subject)-[hR:hasRole]->(r:Role)-[hP:hasPermission]->(p:Permission) WHERE s.value = {subject} AND hR.scene = {scene} RETURN p.value, p.detail;
MATCH (s:Subject) WHERE s.value = {subject} RETURN id(s);
后id作为参数传入START s=node(s) MATCH (s)-[hR:hasRole]->(r:Role)-[hP:hasPermission]->(p:Permission) WHERE hR.scene = {scene} RETURN p.value, p.detail;
一个查询在70.6m条关系中查到共282k条关系最终指向750个p节点,数据库处理第二种query(blockingGet获取全部数据)耗时约1.6s,第一种query耗时约10分钟。
但第二种语句在当前标准中已经被弃用了。
请问这个是什么原因?不胜感激