图数据库入门教程(九)性能优化

执行计划#

当我们图数据库中的数据量较多,并且我们的查询语句复杂时,我们的查询可能会很慢,想知道我们的语句慢在哪里,可以通过profile来查询当前查询的执行计划

g.V('中承基建设集团有限公司').out().out().count().profile()


//输出如下
==>Traversal Metrics
Step                                                               Count  Traversers       Time (ms)    % Dur
=============================================================================================================
GraphDbGraphStep(vertex,[中承基建设集团有限公司])                                 1           1           0.161     0.30
AggregateVertexStep(OUT,vertex)                                       49          25          -0.154    -0.29
AggregateVertexStep(OUT,edge)                                      27694       13561          49.945    92.30
CountGlobalStep                                                        1           1           4.161     7.69
                                            >TOTAL                     -           -          54.114        -

它有如下列

Setp 当前执行的单步(Setp)
Count 扫描到的顶点的数量
Traversers
Time 该setp的消耗时间
% Dur 该setp的消耗时间占总时间的百分比

timelimit#

当我们的语句的某一部执行时间实在太长,我们能忍受少扫描一部分数据,牺牲精度来换执行速度时可以使用,下面的语句,执行时长1267毫秒

g.V('中承基建设集团有限公司').both().both().count().profile()

//输出
==>Traversal Metrics
Step                                                               Count  Traversers       Time (ms)    % Dur
=============================================================================================================
GraphDbGraphStep(vertex,[中承基建设集团有限公司])                                 1           1           0.176     0.01
AggregateVertexStep(BOTH,vertex)                                     249          94          -0.141    -0.01
AggregateVertexStep(BOTH,edge)                                   1517796      416847        1139.780    89.92
CountGlobalStep                                                        1           1         127.763    10.08
                                            >TOTAL                     -           -        1267.579        -

假设我们不能忍受这样的执行时长,我们允许少扫描一部分2度both的数据,可以这样修改语句

g.V('中承基建设集团有限公司').both().both().timeLimit(500).count().profile()

//输出
==>Traversal Metrics
Step                                                               Count  Traversers       Time (ms)    % Dur
=============================================================================================================
GraphDbGraphStep(vertex,[中承基建设集团有限公司])                                 1           1           0.155     0.02
AggregateVertexStep(BOTH,vertex)                                     249          94          -0.132    -0.02
AggregateVertexStep(BOTH,vertex)                                 1517796       46708         671.525    93.93
TimeLimitStep(500)                                               1517796       46708          28.934     4.05
CountGlobalStep                                                        1           1          14.413     2.02
                                            >TOTAL                     -           -         714.897        -

可以看到,第二次both的执行时长虽然并没有精准的限制在500ms,但是也减少了很多,但是扫描的数据量也减少。导致结算结果没那么准确。

作者:roylee666

出处:https://www.cnblogs.com/roylee666/p/16635076.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   树先生1024  阅读(291)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示