Cypher技巧:如何使用连接提示(Join Hints) 避免进行代价高昂的遍历

Cypher语句-查找关系 Cypher查找关系 1、外向关系 关系的方向通过–>或者<–来表示 查询与Person 'Mike Nichols’外向连接的所有节点 MATCH(:Person { name: 'Mike Nichols'})-->(movie) RETURN movie.title 2、有向关系和变量 当需要过滤关系中的属性,或者返回关系的时候,变量就很有必要了 查询’Mike Nichols’的外向关系的类型 MATCH(:Person { name: 'Mike Nichols'})-[r 阅读详情

作者: 安德鲁·鲍曼(Andrew Bowman)

 

使用Cypher匹配模式时,要评估的可能路径数通常会影响到查询执行时间。

当路径中有一个超级节点(又称繁忙节点Dense Node,即一个具有大量关系的节点,其类型包含在MATCH查询中)时,或者仅仅是大量拥有许多关系的节点时,可能的路径数量会呈爆炸式增长,从而严重降低查询速度。 这种通过超节点进行的遍历通常很昂贵。

有时,当遍历某些类型的模式时,您可能已经通过建模中知道,如果可能的话,应该在特定方向上遍历特定类型的节点之间的关系,而不是相反,以获得最佳性能,超节点通常就属于这种情况。

例如,如果我们有一个:People类型节点的社交图谱,成员:LIKE喜欢音乐家,那么很可能其中一些艺术家(也许很多)是超级节点。如果我们这样查找模式:

(:Person)-[:LIKES]->(:Artist {name:'Britney Spears'})

不难想象指向多数:Person的LIKES的关系相对较少,也许少于100,但像布兰妮·斯皮尔斯(Britney Spears,“小甜甜”)这样的受欢迎的:Artist可能有成千上万的:LIKES关系指向她。

经过Britney Spears的遍历成本很大,因为它将可能的路径数量乘以:LIKES关系的数量,从而拖慢了查询的执行。但是,如果我们只是遍历到布兰妮·斯皮尔斯(Britney Spears)就会相对简单。

如果某个查询有可能有多个起点,并且Cyher的查询执行计划由于不知道超级节点的存在而错误地提供低效的执行计划,我们可以在查询中使用联接提示来防止遍历某个节点。

这时,遍历将使用多个起点、并且从每个扩展执行一次,直到到达连接提示中指定的节点为止。然后使用连接从两个方向查找匹配的公共节点,并完成匹配的路径。

如果我想找出我的朋友和我共同喜欢的艺术家(以及共同喜欢多少个艺术家),简单的查询是这样的:

MATCH (me:Person {name:'Me'})-[:FRIENDS_WITH]-(friend)-[:LIKES]->(a:Artist)<-[:LIKES]-(me)
RETURN a, count(a) as likesInCommon

如果查询计划决定仅对该查询使用一个起始点,并且没有意识到潜在的超级节点问题,则有可能选择通过:Artist节点来开始,这可能会非常昂贵:

image

 

由于Cypher查询计划可以自动重新排列相邻MATCH模式的顺序(以及某些WITH子句),因此仅对上面模式匹配进行重新排序是不能保证所要达到的目的的。 我可以使用连接提示来确保仅遍历到有问题的节点,而不遍历或从该节点出发。请注意下例中的USING JOIN ON a:

MATCH (me:Person {name:'Me'})-[:FRIENDS_WITH]-(friend)-[:LIKES]->(a:Artist)<-[:LIKES]-(me)
USING JOIN on a
RETURN a, count(a) as likesInCommon

再次查看查询计划,我们可以看到,从同一起点开始,我们沿两个不同的路径朝节点a方向移动,但没有穿过它,最终执行节点哈希连接以合并公共艺术家节点上的路径。

image

有兴趣的朋友不妨试试。

 

 

 

 

(二)Cypher语言常用方法举例 Cypher语言常用方法举例 阅读详情

相关推荐

知识图谱之Cypher语言的使用

关于Cypher语言的使用

weixin_36723038的博客 3419

浅谈SQL Server 2008中的Hints(提示)

  SQL Server 2008中SQL应用系列--目录索引   SQL Server的系统查询过程负责在SELECT查询执行时候产生查询执行计划。SQL Server会“智能”地选择一个高效计划来取代低效的一个。大多数时候,SQL Server会把这份工作干得很棒。但正如有些人所担忧的,SQL Server并不是万能的,有时候,我们通过查询执行计划、表统计信息、支撑的索引及其他因素...

dfdfadsf3443的博客 408

neo4j教程-Cypher操作

Cypher是图形存储数据库Neo4j的查询语言,Cypher是通过模式匹配Neo4j数据库中的节点和关系,从而对数据库Neo4j中的节点和关系进行一系列的相关操作。下面,通过一张表来介绍一下常用的Neo4j操作命令及相关说明,具体如表所示。

sinat_20471177的博客 3763

Apache Spark 3.0:全新功能知多少

Spark3.0解决了超过3400个JIRAs,历时一年多,是整个社区集体智慧的成果。Spark SQL和 Spark Cores是其中的核心模块,其余模块如PySpark等模块均是建立在两者之上。Spark3.0新增 了太多的功能,无法一一列举,下图是其中24个相对来说比较重要的新功能,下文将会围绕这些进行简单介绍。 性能相关的新功能主要有:  Adaptive Query Execution 自适应查询  Dynamic Partition Pruning 动态裁剪分区  Quer.

lucklilili 2610

Cypher 查询语言完全指南(2024最新版)—— Neo4j 图数据库实战教程

Cypher 查询语言完全指南(2024最新版)—— Neo4j 图数据库实战教程

2501_91537435的博客 2455

neo4j--Cypher查询调优与执行计划

1.查询调优 1.1查询如何执行 Cypher执行引擎会将每个Cypher查询都转为一个执行计划。在执行查询时,执行计划将告知Neo4j执行什么样的操作。 1.2查询性能分析 查看执行计划对查询进行分析时有两个Cypher语句可用: 1.2.1 EXPLAIN 如果只想查看查询计划,而不想运行该语句,可以在查询语句中加入EXPLAIN。此时,该语句将返回空结果,对数据库不会做出任何改变...

Scarlett 6686

spark 中hint使用总结

在spark sql 中用户可以使用Join hint来建议Spark使用哪一种Join。从Spark 3.0开始增加了MERGE、SHUFFLE_HASH和SHUFFLE_REPLICATE_NL这三种Join Hint。优先级为BROADCAST > MERGE > SHUFFLE_HASH > SHUFFLE_REPLICATE_NL。如果Join的两侧都添加了BROADCAST或者SHUFFLE_HASH,则Spark会根据joinType和两侧的大小来选择build哪一侧。

weixin_40809627的博客 1507

【信息科学与工程学】【运营科学】第二篇 C4信息与通信网络运营 (C4) ——数据中心网络运营04

典型值:λ1​∈[−0.02,−0.01], λ2​∈[−0.01,0], η1​,η3​∈[0.1,0.3], η2​,η4​∈[0.05,0.15]参数:δ1​∈[−0.8,−0.3], δ2​∈[−0.5,−0.2], δ3​∈[−0.4,−0.1], δ4​∈[−0.6,−0.2]参数:φ1​∈[0.1,0.3], φ2​∈[−0.2,−0.05], φ3​∈[−0.1,0.1], φ4​∈[−0.3,−0.1]参数:α∈[0.3,0.6], β∈[0.2,0.4], γ∈[0.01,0.03]

weixin_49199313的博客 1206

Neo4j Cypher语法(三)

目录 5 函数 5.1 谓词函数 5.2 标量函数 5.3 聚合函数 5.4 列表函数 5.5 数学函数 5.6 字符串函数 5.7 Udf与用户自定义函数 6 模式 6.1 索引 6.2 限制 7 查询调优 7.1 Cypher查询选项 7.2 基础查询调优示例 7.3 索引值与顺序 8 执行计划 8.1执行计划的操作符 8.2最短路径规划 5 函数 ...

暗焰之珩的博客 8907

别再为下载速度发愁了!手把手教你给qBittorrent/Transmission添加最新可用Tracker(附2024年实测地址清单)

本文提供2024年BT下载加速实战指南,详细解析Tracker工作原理与速度瓶颈,手把手教你为qBittorrent/Transmission添加最新可用Tracker,并附实测地址清单。通过优化配置和精选Tracker列表,显著提升下载速度和稳定性,解决连接延迟和peer数量限制问题。

weixin_28481133的博客 1260

从零到一:YOLOv8在边缘设备上的轻量化部署实战

本文详细介绍了YOLOv8在边缘设备上的轻量化部署实战,涵盖模型优化、TensorRT加速、剪枝与知识蒸馏等关键技术。通过工业质检和智能门禁项目案例,展示了如何将YOLOv8高效部署到树莓派、Jetson Nano等资源受限设备,显著提升推理速度和降低内存占用。文章还提供了动态分辨率调整、多模型级联部署等实用技巧,助力开发者实现边缘AI应用的高效落地。

weixin_29040367的博客 379

你的JoinHint为什么不生效?

本次针对JoinHint从案例着手深入解析JoinHint不生效的原因。

华为云官方博客 2079

Icarus Verilog和GTKwave使用简析

本简要介绍Icarus Verilog和GTKwave的使用,使用iverilog(Icarus Verilog)编译仿真verilog而使用GTKWave查看仿真数据波形下载安装 基本使用 iverilog使用 GTKWave使用 iverilog常用选项 使用库 注意

husipeng86的专栏 1万+

neo4j学习总结--第三课 Cypher(CQL)命令一

一.CQL简介 CQL代表Cypher查询语言。 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言。 Neo4j CQL - 它是Neo4j图形数据库的查询语言。 它是一种声明性模式匹配语言 它遵循SQL语法。 它的语法是非常简单且人性化、可读的格式。 如Oracle SQL - Neo4j CQL 已命令来执行数据库操作。 Neo4j CQL 支持多个子句像在哪里,顺序等,以非常简单的方式编写非常复杂的查询。 NNeo4j CQL 支持一些功能,如字符串,Aggr

qq_36697880的博客 3117

禅道二次开发(一):从零搭建本地开发与调试环境

本文详细介绍了禅道二次开发的第一步:从零搭建本地开发与调试环境。通过部署官方一键安装包、配置端口与防火墙、连接数据库、设置Samba文件共享,并最终在VSCode中配置PHP智能感知与Xdebug调试,手把手教你建立一个隔离、高效的专属开发工作台,为后续的代码修改与功能扩展奠定坚实基础。

weixin_29003437的博客 322

UniDexGrasp++算法实战:无需预生成姿态的灵巧抓取测试指南

本文详细解析了UniDexGrasp++算法在灵巧抓取测试中的实战应用,该算法无需预生成姿态即可实现高效抓取,特别适合处理形状不规则的物体。文章涵盖了环境配置、数据集优化、训练流程及实际测试中的调参技巧,帮助开发者快速掌握这一ICCV 2023提出的先进算法。

weixin_29045585的博客 279

【sql调优之执行计划】使用hint(四)Hints for Join

Sql语句的关联是sql调整的非常重要的一部分,选择正确的join顺序和方式是调优的基础。 Ordered和leading用来选择join的顺序,ordered就是按照from后面的表名书写的顺序,而leading是将某个(或...

611

2026华数杯 国际大学生数学建模竞赛 A题 如何防守直接任意球? 解题思路+模型分析+代码

2026华数杯 国际大学生数学建模竞赛 A题 如何防守直接任意球? 解题思路+模型分析+代码。基于视频数据重构进球轨迹,建立空间坐标系并进行曲线拟合,推算初始速度。建立"香蕉球"、"电梯球"、"落叶球"三种典型直接任意球轨迹的动力学模型,分析C罗进球的类型。针对C罗这类强力球员的直接任意球,提出人墙排布策略和守门员防守策略。

YOLO 663

Spark_Spark JOIN的种类 以及选择依据

参考文章 : 1.Spark join种类(>3种)及join选择依据 https://blog.youkuaiyun.com/rlnLo2pNEfx9c/article/details/106066081 Spark 内部JOIN 大致分为以下3种实现方式 : 1.BroadCastHashJoin 2.ShuffledHashJoin 3.SortMergeJoin 1.BroadCastHashJoin 翻过源码之后你就会发现,Spark 1.6之前实...

迎难而上 3222

【Basis】Lumerical licence center 无法连接的问题

端口,我们需要确认该端口是否被其他程序占用。这里我们将介绍如何处理这一问题。后,今天电脑更新后我无法打开。终结占用该端口的程序后再次打开。

u011699626的博客 314

Python爬虫实战:公共资源交易平台招标数据采集实战 - 从零构建企业情报系统(附CSV导出 + SQLite持久化存储)!

我长期专注 Python 爬虫工程化实战,主理专栏 👉 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 1288

Neo4j(二) - 使用Cypher操作Neo4j

本文系统介绍了图数据库查询语言Cypher的核心语法与应用场景。主要内容包括:Cypher作为Neo4j的声明式查询语言,具有模式匹配强大、语法直观等特点;数据库基本操作如创建、查看和删除数据库(适用于企业版);节点与关系的创建方法,通过示例演示了单节点、节点间关系及属性设置;数据查询部分重点讲解了MATCH命令的模式匹配机制,展示基础查询、关系查询及条件过滤。文章通过理论与实践结合,帮助读者快速掌握图数据库的核心操作范式,为图技术在社交网络分析、推荐系统等领域的应用奠定基础。

zcs2312852665的博客 3267

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

图数据库-Neo4j(二):Cypher语法

Cypher的基本概念:Cypher是neo4j图数据的查询语言, 类似于mysql数据库的sql语句, 但是它允许对图形进行富有表现力和有效的查询和更新. Cypher的基本命令和语法: create命令 match命令 merge命令 relationship关系命令 where命令 delete命令 sort命令 字符串函数 聚合函数 index索引命令 一、create命令: 创建图数据中的节点 1、创建命令格式一 CREATE (e:Employee{id:222, name:'Bob',

u013250861的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Flint Join优化之Hint(优化器)

Flint Join优化之Hint(优化器) Flink目前主要有3种join : join :inner join,等值连接 outerJoin :外连接,分为left-outer join(左连接)、right-outer join(右连接)、full-outer join(全外连接) cross : 笛卡尔积 Flink提供了优化器“hint”(提示)以告诉join函数优化器...

Y_ZYL的博客 1102
上一篇: Neo4j图数据库版本4新特性介绍:内置角色和权限
下一篇: Neo4j图数据库高级应用系列 / 服务器扩展指南 APOC(6.5) - 修改关系
俞博士
俞博士 领域专家: 数据库技术领域 领域专家: 数据库技术领域 业界专家认证 业界专家认证
博客等级 码龄9年 2326粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值