繁体   English   中英

OrientDB中的嵌入式列表查询性能

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM