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秒。
感谢
答案 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')
查询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