Orientdb查询和方案模式可加快阅读阶段

时间:2016-01-19 13:41:56

标签: orientdb orientdb-2.1

我在一个相当大的数据存储上遇到了一些性能问题。 为了优化插入阶段,我们创建了一个文档存储而不是图形,实际上边缘创建性能太慢了。  基本上现在我们有一个A类(有大约30M文件),有一个链接(比如字段fieldL)到B类(大约500个文件)。 查询结构如下:

从A中选择field1 =' field1value'和field2 =' field2value'和field3> 0 ...和fieldL in(从B中选择......)

我发现的第一个问题是: 我在参与where条件的n个属性上创建了n个索引,但是explain命令显示我只使用了一个... https://github.com/orientechnologies/orientdb/issues/3626 所以我创建了一个复合索引,如果我执行只涉及索引的查询,请说

从A中选择field1 =' field1value'和field2 =' field2value'和field3> 0 结果非常快

问题是关于查询的第二部分,涉及fieldL和链接。 我已尝试使用[#rid,...]语法,但似乎表现不佳。

我还尝试使用不同的方法更改架构:B类带有多个指向A类的链接,使用不同的查询模式(比如包含链接fieldL1的字段):

select * from(从B中选择展开(fieldL1)......)其中field1 =' field1value'和field2 =' field2value'和field3> 0

在这种情况下,子查询执行一种数据分区,但不幸的是我们丢失了结果集上的索引,所以我们在第二个where子句上的表现非常慢(field1 =' field1value'和field2 =' field2value' field3> 0)。

我的问题是:更快的执行这类查询是否存在更好的查询模式?

非常感谢。

顺便说一下,在性能调优过程中,执行查询中涉及的文档计数似乎很尴尬。 (https://github.com/orientechnologies/orientdb/issues/3462

1 个答案:

答案 0 :(得分:0)

如果您使用以下查询

select * from (select expand(fieldL1) from B where ...) where field1='field1value' and field2='field2value' and field3>0

它没有使用索引,因为在使用子查询和索引时似乎存在问题

有关详细信息,请查看此链接 https://groups.google.com/forum/#!topic/orient-database/7jWEGpkIzXQ