【问题标题】:OrientDB query too slowOrientDB 查询太慢
【发布时间】:2016-03-08 11:24:18
【问题描述】:

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 

此查询花费 120 秒。

谢谢

【问题讨论】:

  • 你能把“explain select from NOrder where 'xxx' in Passengers.name”的结果贴出来吗?

标签: orientdb orientdb-2.1


【解决方案1】:

我已经尝试过这种结构

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

【讨论】:

  • 你的数据量太小,我解释这些查询,有提示:["Query 'SELECT FROM NOrder WHERE 'xxx' IN Passenger.name' fetched 50000 多条记录:加快速度执行,创建索引或更改查询以使用现有索引”],为什么查询这么慢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 2018-03-14
相关资源
最近更新 更多