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 值低, 可以让查询运行更快;
附录
每个执行计划的操作符的详细说明官网.
版权声明: 本文为 InfoQ 作者【脚动两轮男之漂流小王子】的原创文章。
原文链接:【http://xie.infoq.cn/article/229c8e0460f60d2eb23da714f】。文章转载请联系作者。
评论