2016-03-08 147 views
2

OrientDB v2.1.1, 我有两个类:NOrder和NPassenger,关系1:n,所以NOrder有一个名为“passengers”的字段,其类型为linklist。OrientDB查询太慢

我有两个字段(NOrder ORDER_ID,NPassenger。名称)指数建立

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秒。

感谢

+0

你能后的结果,“从NOrder解释选择其中' xxx'乘客。名称“? –

回答

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。

UPDATE

现在我有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

,这是因为使用的名称字段没有索引(因为目标类是Norder类),然后在Norder类的所有50002记录上进行搜索。

如果我使用的查询

explain select from NPassenger where name = "xxx" 

enter image description here

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

+0

你的数据量太小,我解释一下这些查询,有提示:[“Query'SELECT FROM NOrder WHERE'xxx'IN passengers.name'提取超过50000条记录:加快执行速度,创建索引或更改查询以使用现有索引“],为什么查询得这么慢? – yanwei