Gremlin:在较便宜的步骤之后调用昂贵的步骤是否可以作为优化?

Gremlin: Does calling expensive steps after cheaper ones works as an optimization?

我有一个大的 gremlin 查询,基本上是为了过滤结果,由许多 has() 和 where() 步骤组成,可以按任何顺序编写并给出相同的结果,其中一些很昂贵,一些其中更便宜。

如果我首先调用更便宜的步骤,我猜昂贵的步骤将以更少的迭代次数执行,因为许多顶点被过滤,这在用任何语言编码时都是如此,但在数据库实现中我不知道是否Gremlin 步骤按照写入的顺序执行。

我知道这类事情通常取决于 Gremlin 数据库的实现,但也许你可以给我一些一般性的答案。我也尝试过做一些基准测试,但是在我的特定情况下构建好的基准测试太耗时了,所以也许你可以帮助我了解数据库是如何在内部实现的。

正如您提到的,它确实取决于查询引擎和优化查询计划的开发方式。一些引擎会尝试根据被测试元素的估计基数对部分查询进行重新排序。例如,Amazon Neptune 就是以这种方式工作的。一般来说,最好尽快过滤掉尽可能多的东西。因此,在社交网络中,除非您确信查询引擎能够重新排序此类查询,否则您不会希望以 g.V().hasLabel(‘person’) 之类的内容开始。