Cypher - 降低查询性能的顺序

时间:2017-09-08 06:06:08

标签: neo4j cypher

我正在开发一个图表数据库,其中一个组织包含10亿个员工记录。如果我尝试按照他们的表现订购员工并获得前1000名高效员工,则查询不会返回结果。我怎样才能对此进行微调。

我的查询:

    MATCH (org:Organization{org_guid:"12345"})-[r:EMPLOYED_BY]-(emp:Employee)
    WITH org,r,emp ORDER BY coalesce(r.efficiency,0) DESC
    LIMIT (1000)
    RETURN emp

1 个答案:

答案 0 :(得分:0)

目前在Neo4j ODRER BY中无法使用索引,这意味着它需要扫描,这可能导致大型数据集的性能不佳。

但是,有added a new hub能够使用索引进行范围搜索和维护顺序。您需要稍微重构数据模型,因为您无法在关系属性上创建索引。如果您想要efficiency作为:Employee上的媒体资源订购:

首先,在:Employee(efficiency)上创建一个索引:

CREATE INDEX ON :Employee(efficiency);

然后,

CALL apoc.index.orderedRange('Employee', 'efficiency', 0, 99999, false, 1000) 
YIELD node AS employee
RETURN employee;

另一个轻微的复杂因素是你想要降序,所以你需要存储效率值的负数,以便按降序获得结果。