Neo4j:大规模查询性能问题,即使有索引

时间:2019-06-21 18:34:56

标签: neo4j cypher

在具有数千个节点和关系的数据库实例上运行此查询时,我的响应时间很长:

MATCH (user)-[:PROFILE]->(profile)-[:DATES]->(dates) 
WHERE exists(dates.endDate) 
AND datetime(dates.endDate) < datetime('2020-06-20T18:29:04.116Z') 
AND datetime(dates.endDate) > datetime('2019-10-19T18:29:04.116Z') 
RETURN user 
ORDER BY dates.endDate ASC

我为日期添加了索引: CREATE INDEX ON :Dates(endDate)

但是它并没有提高性能。查询结构本身有问题吗?

1 个答案:

答案 0 :(得分:1)

该索引不会与您的查询一起使用,原因有两个:

  1. 您没有直接使用endDate(将其传递给函数)。
  2. 您没有在Dates模式中指定MATCH标签。

如果您所有的endDate字符串都具有与'2020-06-20T18:29:04.116Z'完全相同的格式,那么实际上就不需要使用{{1 }}函数(这也会减慢查询速度)-您可以直接比较字符串。

例如,如果以上假设为真,则此查询应使用您的索引并且速度非常快:

datetime()