【发布时间】:2020-05-19 13:12:18
【问题描述】:
我有一个运行速度非常快(1-2 秒)并返回 20 行的简单查询:
select * from table where field1 = 'ABC'
但是,如果我在另一个字段上再添加一个过滤器,例如:
select * from table where field1 = 'ABC' and field2 = 'XYZ'
查询超时(我们有 30 秒的限制)。如果重要的话,在我们的例子中,查询应该返回相同的 20 行。
这两个字段都不是排序键的一部分,并且该表包含大约 2.5 亿行和大约 20 列。
问题是:这是预期的行为吗?我希望查询运行时间应该或多或少相等。如果符合预期,是否有指南应该避免什么样的查询,或者是否有工具可以调查它是否是“坏”查询。
提前致谢!
【问题讨论】:
-
第二次查询需要更长的时间是很自然的,因为会有更多的比较,但我无法弄清楚它如何花费超过 30 秒。你说的超时是什么意思?您是从
clickhouse-client还是 JDBC 发送查询? -
你能透露一下这两列的类型吗?我怀疑 select * from table where field2 = 'XYZ' 也需要很长时间 - 你能检查一下吗?
-
你可以试试这个:select * from (select * from table where field1 = 'ABC') where field2 = 'XYZ' settings enable_optimize_predicate_expression=0;
-
谢谢大家! 1) 只是通过 REST 2) 是的,确实如此。 3) 工作速度快。我猜丹尼斯已经详细说明了,现在一切似乎都清楚了。
标签: clickhouse