我正在开发一个图表数据库,其中一个组织包含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
答案 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;
另一个轻微的复杂因素是你想要降序,所以你需要存储效率值的负数,以便按降序获得结果。