pr_dttm > (select max(pr_dttm) from test.table2) limit 200`
запрос выполняется адово долго, как будто он каждый раз считает величину из подзапроса, при том что считать ее надо ровно один раз. Раньше считалось быстро - кто-нибудь знает, это лечится какой-то опцией?
То есть подзапрос не кэшируется а должен бы
о, кажется вижу, спасибо
Версия кх раньше и версия теперь?
теперь 21.2.4.6, до этого хз
а если where заменить на PREWHERE? select a,b from test.table PREWHERE pr_dttm > (select max(pr_dttm) from test.table2) limit 200
не помогает, а вот если туда конкретную дату вставить - все летает
интересно где это сломали, наверное кстати через with можно with (select max(pr_dttm) from test.table2) as x select a,b from test.table WHERE pr_dttm > x limit 200
ОК, а сам подазпрос вообще насколько быстр? select max(pr_dttm) from test.table2
А какая кстати версия кх?
теперь 21.2.4.6, до этого хз
для начала да вам надо обновится >мб обновится на самый последний 21.2
Обновился, не помогло, подзапрос все ещё выполняется каждый раз
не воспроизводится create table t(a Int64, b Int64, p DateTime) Engine=MergeTree order by a; create table t2(a Int64, b Int64, p DateTime) Engine=MergeTree order by a; insert into t(a) select number from numbers(100000000); insert into t(a, p) select number, now() from numbers(1); insert into t2(a) select number from numbers(100000000); insert into t2(a, p) select number, now()-3600 from numbers(1); select a,b from t WHERE p > (select max(p) from t2) limit 200;
кажется я понял, оптимизатор не понимает, по какой именно дате я ограничил запрос, и он фулсканит таблицу, что довольно фатально. Может есть какая опция?
может уже какие-нибудь примеры, хотя бы ddl ?
CREATE TABLE bmmm.debts ( StartedDateTime DateTime , FinishedDateTime DateTime COMMENT 'не заполняется', Network String , ID String , CreatedRec DateTime COMMENT 'дата создания записи ClickHouse', RowCreatedAt DateTime DEFAULT now(), INDEX IdxRowCreatedAt RowCreatedAt TYPE minmax GRANULARITY 1 ) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/{installation}/{cluster}/tables/{shard}/bmmm/debts', '{replica}') PARTITION BY toYYYYMM(StartedDateTime) PRIMARY KEY StartedDateTime ORDER BY (StartedDateTime, Network, ID) SETTINGS index_granularity = 8192
можно увидеть вывод set send_logs_level='debug' и потом запрос select .... fromat Null
это только в консоли можно сделать или в условном дбивере тоже?
вот такой воркэраунд работает? select a,b from t WHERE p > toDateTime( (select max(p) from t2 ) ) limit 200; ?
Обсуждают сегодня