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