簡體   English   中英

ArangoDB索引用於邊集合

[英]ArangoDB Index usage with edge collections

任務:更新許多邊緣屬性的最快方法。 出於性能原因,我忽略了圖形方法並直接使用集合進行過濾。

ArangoDB 2.8b3

查詢[優惠 - 邊緣集合]:

FOR O In Offer
FILTER O._from == @from and O._to == @to and O.expired > DATE_TIMESTAMP(@newoffertime)
UPDATE O WITH { expired: @newoffertime } IN Offer
RETURN { _key: OLD._key, prices_hash: OLD.prices_hash }

我對_to,_from和范圍索引的系統索引已過期

查詢解釋顯示

7   edge   Offer        false    false        49.51 %   [ `_from`, `_to` ]   O.`_to` == "Product/1023058135528"

系統索引僅用於過濾部分記錄(_to),而不是用於(_from,_to),'過期'索引也不使用。 請解釋一下這種行為的原因,如果我在規划數據模型時肯定知道的話,有可能指定用於最短路徑的索引提示嗎?

對於在查詢中結合邏輯AND的過濾條件,ArangoDB的查詢優化器將選擇單個索引。 這就是為什么它沒有同時選擇邊緣索引跳轉列表索引的原因。

它將在expired[ "_from", "_to" ]索引和[ "_from", "_to" ]上的邊緣索引之間進行選擇,並將選擇確定較低成本的那個,這是通過索引選擇性估計來衡量的。 正如解釋輸出所示,它似乎已經選擇_to上的邊緣索引。

邊緣索引內部由兩個單獨的哈希索引組成,一個在_from屬性上,一個在_to屬性上,因此它允許通過_from_to屬性快速訪問。 但是,它不是 [ "_from", "_to" ]的組合索引,因此它不支持同時請求_from_to查詢。 它必須選擇一個內部哈希索引,並且似乎在該查詢中選擇_to上的那個。 該決定再次基於平均指數選擇性。

無法向優化器提供任何索引使用提示 - 除此之外,它無法同時為此特定查詢使用兩個索引。

看看解釋輸出中的選擇性估計,似乎邊緣索引不是很有選擇性,這意味着會有很多邊具有相同的_to值。 由於優化器也應該考慮_from上的索引,我會假設索引的選擇性更低,並且這些索引中的每一個只能幫助跳過最多50%的邊緣,這不是很多。 如果確實如此,那么查詢仍將檢索(並過濾)大量文檔,解釋潛在的緩慢。

目前,屬性_from_to在邊集合的始終存在的邊緣索引中自動編入索引,並且它們不能用於其他用戶定義的索引中。 這是我們希望在將來的版本中添加的功能,因為_from_to可以訪問用戶定義的索引,可以在[ "_from", "_to", "expired" ]上創建組合(排序)索引[ "_from", "_to", "expired" ]這將是比任何單獨的三個單屬性索引的潛在更具有選擇性。

暫無
暫無

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

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