Neo4j大库查询耗时过久,应创建哪些proper indexes优化性能?
Neo4j查询优化索引方案
核心新增索引
mentioned_by关系video_id属性索引
当前查询的最大性能开销来自于两个mentioned_by关系的video_id等值匹配,该索引可以避免全量扫描所有指向TN频道的mentioned_by关系做属性对比,直接快速定位同视频ID的关系对。
建索引语句:CREATE INDEX idx_mentioned_by_video_id FOR ()-[r:mentioned_by]-() ON (r.video_id)Politician节点fullname属性索引
查询中用到了p1.fullname < p2.fullname范围过滤,以及后续的DISTINCT去重操作,该索引可以大幅提升属性过滤、去重的执行效率,无需全量加载所有政客节点的属性再做计算。
建索引语句:CREATE INDEX idx_politician_fullname FOR (p:Politician) ON (p.fullname)
可选优化索引(面向高频同类查询)
如果这类同频道政客共现查询是高频业务场景,可以新增复合索引进一步降低匹配阶段的IO开销:
CREATE INDEX idx_mentioned_by_channel_video FOR ()-[r:mentioned_by]->(c:Channel) ON (c.name, r.video_id)
效果验证
索引创建完成后,你可以给原查询加上PROFILE关键字前缀执行,检查执行计划中是否已经命中新建的索引,确认优化效果。
内容的提问来源于stack exchange,提问作者Rodriguez Manuel Joaquin
相关产品推荐
相关产品推荐

