IN指令如何影响Druid SQL请求?

问题描述 投票:0回答:1

Druid Documentation of the IN Filter没有提及效率。我们遇到一条SQL语句不断超时的问题,我认为主要的罪魁祸首是field IN (v, e, r, y, l, o, n, g, l, i, s, t, o, f, i, d, s)子句中的WHERE

是否存在有关Druid中IN过滤器效率的文档?如何使用它以及not如何使用它?

我认为这是我们罪魁祸首的主要原因是IN列表中的元素列表可能非常大(成千上万个标识符),并且列表可能每天都在变化(增长)。增长幅度是一到两,三(我不太确定最大值是多少,我怀疑有些客户一天可能增加多达10个新商品),这些年来,对于某些商品来说,成千上万我们的客户。

我们可能会使用JOIN或将WHERE转换为calculate标识符列表。看起来像这样:

`WHERE ... object.customer_id = customer.id AND object.id = id ...`

[我想知道Druid如何为我们聚合数据,并且当更简单的WHERE ...子句可能会更好地工作并真正自动聚合结果时,随着时间的流逝,IN过滤器是否会引起聚合问题。

我们的查询使用的时间设置为年初至今(因此,从1月1日到今天)。

where-clause query-performance where-in druid
1个回答
0
投票

我认为首先检查德鲁伊生成哪种查询是明智的。

你能做一个explain plan for select .. WHERE ... object.customer_id = customer.id AND object.id = id ...吗?

德鲁伊会为其生成哪种查询?您还可以提供此数据吗?

而且我还注意到您没有在查询中指定__time过滤器。由于druid是一个时间序列数据库,因此您应始终尝试指定一个时间窗口来搜索其数据。如果您不指定它,它将需要遍历所有数据。

© www.soinside.com 2019 - 2024. All rights reserved.