簡體   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