如何告诉密码在哪里制作nodehashjoin

用户732456

我对某些类型的查询有非常有趣的观察。

我的起始查询是:

PROFILE 
MATCH (cs:Movie { id: 'm:H01016' }) WITH cs 
MATCH (ms:Actor { id: 'a:111' }) WITH cs,ms  
MATCH p=((cs)--(x0)--(x1)--(x2)--(ms))   
RETURN EXTRACT(n IN nodes(p) | n)  SKIP 0 LIMIT 24

用我的数据执行 141 毫秒

稍微修改一下这个查询

PROFILE 
MATCH (cs:Movie { id: 'm:H01016' }) WITH cs 
MATCH (ms:Actor { id: 'a:111' }) WITH cs,ms  
MATCH p=((cs)--(x0:Director)--(x1)--(x2)--(ms))   
RETURN EXTRACT(n IN nodes(p) | n)  SKIP 0 LIMIT 24

它开始执行 7-8 秒。我看到的唯一区别是 nodehashjoin 发生的位置。

第一个执行计划是:

在此处输入图片说明

第二个看起来像:

在此处输入图片说明

区别非常明显。在第一个查询中,我们在任一侧都有 2 个扩展,nodehashjoin 发生在中间,而在第二个查询中,我们从一侧扩展了 3 个,在另一侧扩展了 1 个,nodehashjoin 发生在最后。这 3 个扩展在第二个查询上导致超过一百万的 db 命中。那么有什么方法可以指导 nodehashjoin 必须发生的地方吗?

这是缓慢执行查询的扩展版本。我相信这没有什么奇怪的。只是 nodehashjoin 发生在不合适的地方:

在此处输入图片说明

塞尼奥

所以,如果你想以某种方式改变查询优化的行为,实际上有一个技巧,可以使用。我没有你的数据集来测试它,但是这个子句会影响你的执行计划。通过这种方式,您可以将 Expand(all) 和过滤器更改为 Expand(Into) 运算符:

with * where true

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何告诉Maven在哪里搜索本地POM?

如何告诉CMake在哪里放置构建文件?

如何告诉Gradle在哪里寻找javax.servlet?

告诉阴谋集团主要模块在哪里

如何告诉单声道在哪里可以找到图书馆?

告诉swaggerui主机在哪里的最佳方法

如何告诉Rust在哪里寻找静态库?

告诉Mocha在哪里寻找测试文件

我如何告诉Bazel Python.h住在哪里?

您如何告诉Android Studio 3.0在哪里可以找到外部ndk源文件?

如何告诉React Router v4在哪里加载组件?

告诉ocamlbuild在哪里可以找到模块

如何告诉从源代码编译的Visual Studio Code在哪里找到sqlite模块?

如何告诉CMake在哪里可以找到库的目录?

如何告诉Visual Studio我的其他.dll文件在哪里?

如何告诉VSCode在哪里可以找到头文件和源文件

如何告诉Ubuntu在哪里安装程序以及如何告诉现有程序在哪里安装?

密码盐存放在哪里以及如何获取

我如何告诉solr我的文档集合在哪里?

告诉Java程序属性文件在哪里

samba在哪里存储密码?

我如何告诉Maven Tomcat在哪里?

如何告诉IntelliJ IDEA在哪里找到用于sublime text 2插件开发的python包?

如何告诉rustc(通过货物)在哪里找到我的dll导入库

cmake:如何告诉库在哪里找到依赖项

如何告诉Rails 4应用我的SSL证书在哪里?

如何告诉cmake用autouic生成的ui文件在哪里

密码保存在哪里?

如何告诉 webpack 在哪里可以找到动态导入的模块?