繁体   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