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