2016-03-08 142 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