Loading

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

执行计划

当我们图数据库中的数据量较多,并且我们的查询语句复杂时,我们的查询可能会很慢,想知道我们的语句慢在哪里,可以通过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,但是也减少了很多,但是扫描的数据量也减少。导致结算结果没那么准确。

posted @ 2022-08-29 10:38  树先生1024  阅读(260)  评论(0编辑  收藏  举报