在具有数千个节点和关系的数据库实例上运行此查询时,我的响应时间很长:
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)
但是它并没有提高性能。查询结构本身有问题吗?
答案 0 :(得分:1)
该索引不会与您的查询一起使用,原因有两个:
endDate
(将其传递给函数)。Dates
模式中指定MATCH
标签。 如果您所有的endDate
字符串都具有与'2020-06-20T18:29:04.116Z'完全相同的格式,那么实际上就不需要使用{{1 }}函数(这也会减慢查询速度)-您可以直接比较字符串。
例如,如果以上假设为真,则此查询应使用您的索引并且速度非常快:
datetime()