也许这是关于OrientDB的一个非常简单的问题,因为我只使用了它几天。
我的问题是,我在OrientDB中有大约一百万个文档(我们称之为ClassA),每个文档都有一个字段(我们称之为fieldA)。
fieldA的类型是嵌入式列表,嵌入式列表中的项目是字符串。
因此,OrientDB中的数据是这样的:
[
{
fieldA: ['a','b','c']
},
{
fieldA: ['c','d','e']
},
]
我想要做的是通过fieldA查询文档。
所以查询是这样的:
select from ClassA where 'c' in fieldA
因为,数据库中有数百万条记录,所以我为fieldA创建了一个索引,创建索引的脚本是这样的:
create index ClassA.fieldA not unique
但是当我解释选择查询时,我得到了这个:
{
"@type":"d","@version":0,
"involvedIndexes":["ClassA.fieldA"],
"current":"#11:960477",
"fetchingFromTargetElapsed":160596,
"documentReads":959211,
"documentAnalyzedCompatibleClass":959211,
"recordReads":959211,
"elapsed":160596.25,
"resultType":"collection",
"resultSize":1,
"@fieldTypes":"involvedIndexes=e,fetchingFromTargetElapsed=l,documentReads=l,documentAnalyzedCompatibleClass=l,recordReads=l,elapsed=f"
}
正如您在结果中看到的那样,即使它使用了索引[“ClassA.fieldA”],但对于959211条记录,查询的最后时间为160596毫秒,大约为16秒。那太慢了(相比MySQL,对于mysql来说,记录甚至更大,因为MySQL不支持嵌入式列表,所以mysql的存储是针对每个fieldA,在MySQL中有记录,而且查询非常快,只花费0.015秒)。
我做错了吗?或者,OrientDB中嵌入式列表查询的性能是bat?
有人对OrientDB有深入的了解吗?OrientDB索引对此有何帮助?
答案 0 :(得分:0)
MySQL在查询之后通过对它们进行分页来返回光标,但是当您获取所有记录时,结果可能会有所不同。请尝试做
select count(*) from ClassA where 'c' in fieldA
在OrientDB和MySQL上,或尝试获取所有记录。