[英]Why is this ArangoDB query too slow?
我是新的ArangoDB用戶,正在使用以下查詢
FOR i IN meteo
FILTER
i.`POM` == "Maxial"
&& TO_NUMBER(i.`TMP`) < 4.2
&& DATE_TIMESTAMP(i.`DTM`) > DATE_TIMESTAMP("2014-12-10")
&& DATE_TIMESTAMP(i.`DTM`) < DATE_TIMESTAMP("2014-12-15")
RETURN
i.`TMP`
收集了200萬份文件。 它在已過濾的三個字段上都有一個索引。 它需要一個代理。 Web界面上的9秒。
是否可以更快地運行它?
謝謝
雨果
我無法訪問基礎數據和數據分布,也無法訪問確切的索引定義,因此我只能提供一般性的建議:
explain()
命令以查看查詢是否使用索引,如果是,則使用索引。 explain()
顯示未使用任何索引,請檢查查詢的FILTER條件中包含的屬性是否實際被索引。 有db.<collection>.getIndexes()
命令來檢查對哪些屬性建立索引。 ==
),而不用於其他比較類型( <
, <=
, >
, >=
等)。 僅在查詢的FILTER條件中使用了所有索引屬性時,才使用哈希索引。 僅在FILTER條件中至少使用了它的第一個屬性的情況下,才使用跳過列表索引。 如果在查詢中從左到右指定了更多的跳過列表索引屬性,則也可以使用它們並允許過濾更多文檔。 "POM"
, "TMP"
和"DTM"
上具有多個單獨的索引將無濟於事,因為它只會對每個迭代的集合使用一個索引。 相反,如果查詢可以從索引中受益,我建議嘗試將多個屬性放入索引中。 [ "POM", "DTM" ]
上的跳過列表索引可能是正確的選擇(與6結合使用)。 "POM"
屬性。 原因是在函數調用中使用了其他屬性(即TO_NUMBER()
, DATE_TIMESTAMP()
)。 通常,對於在函數內部使用的屬性,將不使用索引(例如,對於TO_NUMBER(i.tmp) < 4.2
將不使用索引。對於DATE_TIMESTAMP(i.DTM) > DATE_TIMESTAMP("2014-12-10")
。修改條件,以便將索引屬性直接與某個常數進行比較,或者一次性計算的值可以啟用更多候選索引。如果可能,請嘗試重寫條件,以便僅索引屬性出現在索引的一側。對於此特定查詢,最好使用i.DTM > "2014-12-10"
而不是DATE_TIMESTAMP(i.DTM) > DATE_TIMESTAMP("2014-12-10")
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.