OrientDB查询以接收给定日期之前的最后一个顶点

OrientDB查询以接收给定日期之前的最后一个顶点,orientdb,Orientdb,假设我在orient数据库中有以下由边连接的顶点列表: [t=1] --> [t=2] --> [t=3] --> [t=4] --> [t=5] --> [t=6] --> [t=7] 每个顶点都有一个时间戳t。现在,我希望在给定日期之前接收最后一个顶点。示例:给我t=5之前的最后一个顶点,即t=4 目前,我正在使用以下查询来执行此操作: SELECT FROM ANYVERTEX WHERE t < 5 ORDER BY t DESC LIMI

假设我在orient数据库中有以下由边连接的顶点列表:

 [t=1] --> [t=2] --> [t=3] --> [t=4] --> [t=5] --> [t=6] --> [t=7]
每个顶点都有一个时间戳t。现在,我希望在给定日期之前接收最后一个顶点。示例:给我t=5之前的最后一个顶点,即t=4

目前,我正在使用以下查询来执行此操作:

 SELECT FROM ANYVERTEX WHERE t < 5 ORDER BY t DESC LIMIT 1

当最多有1000个元素时,该查询可以正常工作,但随着列表中插入的元素数量的增加,该查询的性能会下降。我已经尝试过使用索引,这提高了总体性能,但随着元素数量的增加,性能会下降的问题仍然存在。

构建查询时,请始终尝试使用查询中有关关系的信息来提高性能。在这种情况下,您不需要排序,这是一个昂贵的操作,因为您知道所需的顶点有一条到顶点的传入边,您只需在查询中使用该信息即可

例如,假设我有以下设置:

创建类T扩展V 创建顶点T集T=1 创建顶点T集T=2 创建顶点T集T=3 创建顶点T集T=4 创建顶点T集T=5 创建类链接扩展E 创建边链接,从T中选择*从T,其中T=1到T中选择*从T,其中T=2 创建边链接,从选择*从T,其中T=2到选择*从T,其中T=3 从T=3处选择*从T处选择到T=4处选择*创建边链接 创建边链接,从T中选择*从T,其中T=4到T中选择*从T,其中T=5 然后我可以选择任意T之前的顶点,如下所示:

从T中选择expandin'link',其中T=2 此查询执行以下操作:

从T中选择顶点,其中T=2 从该顶点开始,遍历link类型的传入边 展开该边来自的顶点以获取其所有信息 结果正是您想要的:

这将提供更好的性能,特别是如果在顶点的属性t上添加索引,因为您使用的是您事先知道的有关关系的所有信息=您需要的节点与您选择的节点之间有一条边


希望这能帮到你。

这似乎是我以前没想到的一个好选择。我要试一试。非常感谢。