簡體   English   中英

為什么這個ArangoDB查詢太慢?

[英]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秒。

是否可以更快地運行它?

謝謝

雨果

我無法訪問基礎數據和數據分布,也無法訪問確切的索引定義,因此我只能提供一般性的建議:

  1. 使用explain()命令以查看查詢是否使用索引,如果是,則使用索引。
  2. 如果explain()顯示未使用任何索引,請檢查查詢的FILTER條件中包含的屬性是否實際被索引。 db.<collection>.getIndexes()命令來檢查對哪些屬性建立索引。
  3. 如果存在索引但查詢未使用索引,則索引的類型可能錯誤。 例如,哈希索引將僅用於相等比較(即== ),而不用於其他比較類型( <<=>>=等)。 僅在查詢的FILTER條件中使用了所有索引屬性時,才使用哈希索引。 僅在FILTER條件中至少使用了它的第一個屬性的情況下,才使用跳過列表索引。 如果在查詢中從左到右指定了更多的跳過列表索引屬性,則也可以使用它們並允許過濾更多文檔。
  4. 掃描集合時僅會選擇一個索引。 "POM""TMP""DTM"上具有多個單獨的索引將無濟於事,因為它只會對每個迭代的集合使用一個索引。 相反,如果查詢可以從索引中受益,我建議嘗試將多個屬性放入索引中。
  5. 索引的選擇性越高,越好。 例如,單個屬性的索引可能會過濾很多文檔,但是多個屬性的組合索引可能會過濾更多文檔。 對於此特定查詢, [ "POM", "DTM" ]上的跳過列表索引可能是正確的選擇(與6結合使用)。
  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.

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