我已经尝试过这种结构
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