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