OrientDB查询太慢

时间:2016-03-08 11:24:19

标签: orientdb orientdb-2.1

OrientDB v2.1.1, 我有两类:NOrder和NPassenger,关系1:n,所以NOrder有一个名为“passenger”的文件,其类型是linklist。

我有两个字段(NOrder order_id,NPassenger.Name)建立索引

NOrder ducuments计数是3百万。

我解释了这些问题:

 1)select from NOrder where passengers contains(name = 'xxx')
  why this query not involved index .

 2)select from NOrder where 'xxx' in passengers.name
  this query involved indexeses 

此查询费用为120秒。

感谢

1 个答案:

答案 0 :(得分:0)

我尝试过这种结构

create class NPassenger
create property NPassenger.name String
create index NPassenger.name on NPassenger (name) NOTUNIQUE_HASH_INDEX

create class NOrder 
create property NOrder.order_id String
create property NOrder.passengers linklist NPassenger
create index NOrder.order_id on NOrder (order_id) UNIQUE_HASH_INDEX

insert into NPassenger(name) values ("xxx")  // 12:0
insert into NPassenger(name) values ("Alessandro")  //12:1

insert into NOrder(order_id,passengers) values ("order 1",[12:0])
insert into NOrder(order_id,passengers) values ("order 2",[12:1])

查询1

explain select from NOrder where passengers contains(name = 'xxx')

enter image description here

查询2

explain select from NOrder where 'xxx' in passengers.name

enter image description here

两个查询都不使用索引,因为类目标是NOrder。

<强>更新

现在我有50002 NOrder和50002 NPassenger。 如果我执行查询

explain select from NOrder where passengers contains(name = 'xxx')

explain select from NOrder where 'xxx' IN passengers.name'

我得到了

enter image description here

这是因为没有使用name字段的索引(因为目标类是Norder类),然后搜索Norder类的所有50002条记录。

如果我使用查询

explain select from NPassenger where name = "xxx"

enter image description here

使用索引NPassenger.name是因为目标类是NPassenger