[英]Embedded List Query Performance In OrientDB
也许这是一个关于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中嵌入式列表查询的性能是最好的选择?
有人可以对OrientDB和OrientDB索引有深入的了解吗?
MySQL通过分页在查询之后立即返回游标,但是当您获取所有记录时,结果可能会有所不同。 请尝试做一个
select count(*) from ClassA where 'c' in fieldA
在OrientDB和MySQL上,或尝试获取所有记录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.