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