2

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

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

NOrder 文件计数为 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 

此查询花费 120sec 。

谢谢

4

1 回答 1

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')

在此处输入图像描述

查询 2

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

在此处输入图像描述

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

更新

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

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

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

我明白了

在此处输入图像描述

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

如果我使用查询

explain select from NPassenger where name = "xxx"

在此处输入图像描述

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

于 2016-03-08T16:38:08.077 回答