使用LET语句时的索引

时间:2015-02-13 15:20:53

标签: orientdb

考虑两个顶点,一个名为Crash,另一个名为GenericCarModel。 Crash顶点有一个名为carModel的属性,它是一个String。 GenericCarModel顶点有一个名为name的属性,它已被索引为GenericCarModel.nameHash。

我有兴趣找到存在于Crash Vertex中但尚未通过比较名称添加到GenericCarModel中的carModel。基本上填充了这个维恩图的一部分:enter image description here

同样假设在这个特定的例子中,我们在GenericCarModel中有比崩溃的CarModel更多的模型。

我尝试了以下方法:

SELECT FROM Crash WHERE $all.size() = 0 
LET $all = 
    (SELECT FROM GenericCarModel 
    WHERE name = $parent.$current.carModel LIMIT 1)

这种方法有效,但速度很慢。让我们使用索引:

SELECT FROM Crash WHERE $all.size() = 0 
LET $all = 
    (SELECT FROM index:CarModel.nameHash 
    WHERE key = $parent.$current.carModel LIMIT 1)

这不起作用。

所以有两个问题,为什么指数方法不起作用?我的方法似乎不是最优的,你会如何处理它?<​​/ p>

1 个答案:

答案 0 :(得分:0)

听起来你忽略了graphdb的图形功能!我会改造这个,以便你有:

  • 汽车延伸V
  • 事件延伸V
  • 崩溃扩展E

当发生错误时,您可以使用详细信息创建“事件”顶点。然后,您可以从事件到汽车创建一个崩溃边缘。