簡體   English   中英

OrientDB中查詢的最佳索引

[英]Optimal index for query in OrientDB

我有以下查詢

SELECT FROM Post
WHERE activityLog IS NOT NULL
AND activityLog_pointerProcessed IS NULL
LIMIT 1000

這些屬性定義為

CREATE PROPERTY Post.activityLog_pointerProcessed BOOLEAN
CREATE PROPERTY Post.activityLog EMBEDDEDMAP EMBEDDEDMAP

但是,它似乎運行得很慢。 我添加了以下索引

CREATE INDEX Post_activityLog_pointerProcessed
ON Post (activityLog, activityLog_pointerProcessed)
NOTUNIQUE_HASH_INDEX

我想知道這是否是此方案的最佳索引,或者是否存在其他設置方法。 郵政類仍在填補,但目前有200萬行。 該查詢大約需要5-10秒才能運行。

這是我explain時得到的

orientdb {pumpup}>解釋從哪里發布的活動日志不為空,而活動日志指針處理過的為空限制1000

在338.688995秒中,配置文件命令'{documentReads:378236,current:#22:378235,documentAnalyzedCompatibleClass:378236,recordReads:378236,fetchingFromTargetElapsed:337922,evaluated:378236,elapsed:337922.88,resultType:collection,resultSize:1000}' :{“ @type”:“ d”,“ @ version”:0,“ documentReads”:378236,“ current”:“#22:378235”,“ documentAnalyzedCompatibleClass”:378236,“ recordReads”:378236,“ fetchingFromTargetElapsed” :337922, “評價”:378236, “經過”:337922.88, “與resultType”: “收集”, “resultSize”:1000, “@域類型”:“documentReads = 1,documentAnalyzedCompatibleClass = 1,recordReads = 1,fetchingFromTargetElapsed =升,評價= 1,經過= F“}

通過閱讀解釋結果,該索引尚未使用,並且已掃描378,236文檔。

activityLog屬性已聲明為EMBEDDEDMAP,因此將對內部值建立索引,而不是對集合為null的事實進行索引。 我認為這不會起作用,但是請嘗試在索引上啟用空值:

https://github.com/orientechnologies/orientdb/wiki/Indexes#null-values

在這種情況下,最好的辦法是保存另一個布爾值“ activityLog.empty”以建立索引,並更快地檢索查詢。

CREATE PROPERTY Post.activityLogEmpty BOOLEAN
CREATE INDEX Post_activityLog_pointerProcessed ON Post (activityLogEmpty, activityLog_pointerProcessed) 
                                               NOTUNIQUE_HASH_INDEX

在創建時,將屬性“ activityLogEmpty”設置為FALSE,並在填充“ activityLog”集合后立即將其設置為true。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM