Neo4j执行计划

发布于: 2020 年 05 月 22 日
Neo4j执行计划

neo4j中使用Cyper来进行查询, cyper 执行过程中会将查询语句解析成执行计划树, 选取最优的执行计划, 然后执行, 生成执行计划中, 有两个东西需要特别注意.

评估模型

评估模型用来估算最优执行计划, 从而选取最优执行计划, 执行计划可以使用profile或者explain关键字来进行查看, 执行计划开始于叶子节点, 叶子节点没有input, 一般包括操作符scan/seek, 操作符直接从存储引擎直接获取数据, 因此会有database hit(下文简称为dh), 叶子节点产生的结果按序流转到父, 一直到root节点, 然后产生出最后的结果.

立即评估/延迟评估

一般来说, 查询评估模型是延迟执行的; 由于父子节点间是通过管道传输的, 所有子节点的结果一到父节点, 父节点就会执行, 因此子节点不需要完全执行完毕, 父节点才开始执行; 然而一些操作符例如聚合/排序等操作, 需要所有子节点全部执行完成后输出至父, 父节点操作符才能开始进行执行, 这类操作neo4j中成为eager操作.

执行计划涉及指标概念

Rows: 操作符产生的行数, 执行profile操作可用, explain操作不会触发rows;

EstimatedRows: 估算操作符产生的行数, 基于neo4j中可用的统计信息预估一个操作符执行的近似数, cyper编译器使用这个预估值选择合适的执行计划;

DbHits: 每个操作符会请求存储引擎来检索或者更新数据. 对于存储引擎来说, DBhits是个抽象概念, 触发Dbhit操作的操作符见附表;

time: 当使用pipelined运行时, 一些操作符会显示, 数值显示执行给定操作符的ms;

Page Cache

这是一个在neo4j企业版中才会提供的功能, 主要作用就是加快检索速度, 复合cache的定位, page cache提供的一些统计值, pc hits 缓存命中数, pc misses 缓存未命中数, pc hits ratio命中率, page cache被用来缓存数据避免访问磁盘, hits值高, miss值低, 可以让查询运行更快;

附录

每个执行计划的操作符的详细说明官网.

发布于: 2020 年 05 月 22 日 阅读数: 3
用户头像

还未添加个人签名 2020.02.06 加入

还未添加个人简介

评论

发布
暂无评论
Neo4j执行计划