Changelog 2026

- Improve the performance of data lakes. In previous versions, reading from object storage didn't resize the pipeline to the number of processing threads. This gives orders of magnitude improvements (~40x) on multi-core machines. [#99548](https://github.com/ClickHouse/ClickHouse/pull/99548) ([Alexey Milovidov](https://github.com/alexey-milovidov)).
- Now, the relationship between `enable_parallel_replicas` and `automatic_parallel_replicas_mode` is as follows. A query can use parallel replicas only if `enable_parallel_replicas > 0`. Additionally, if `automatic_parallel_replicas_mode=1`, the decision whether to use parallel replicas is made during planning based on the previously collected statistics. If `automatic_parallel_replicas_mode=0`, parallel replicas will be used for all supported queries regardless of any statistics. One notable exemption is distributed insert-select with parallel replicas: in this case, queries will always be executed as if `automatic_parallel_replicas_mode=0`. [#97517](https://github.com/ClickHouse/ClickHouse/pull/97517) ([Nikita Taranov](https://github.com/nickitat)).
- Allow partition pruning when the predicate contains any comparison operator (`=`, `<`, `>`, `!=`) and the partition key is wrapped in a deterministic function chain (e.g. `PARTITION BY x` and predicates like `cityHash64(x) % 5 > 2`, `toYYYYMM(x) < 2026`, `toYYYYMM(x) = 2026`, or `toYYYYMM(x) != 2026` will all use the partition key for pruning). Closes [#28800](https://github.com/ClickHouse/ClickHouse/issues/28800). [#98432](https://github.com/ClickHouse/ClickHouse/pull/98432) ([Nihal Z. Miaji](https://github.com/nihalzp)).
- Allow read-in-order optimization and primary-key pruning when the `CAST` target type is `Nullable` and the conversion is monotonic; for example, with `PRIMARY KEY x`, ClickHouse can use read-in-order optimization for `ORDER BY x::Nullable(UInt64)` and can apply primary-key pruning for predicates such as `WHERE x::Nullable(UInt64) > 500000`. [#98482](https://github.com/ClickHouse/ClickHouse/pull/98482) ([Nihal Z. Miaji](https://github.com/nihalzp)).
- Allow index pruning and filter pushdown when an integral column is compared with a float literal; for example, predicates like `WHERE x < 10.5` can now use the primary key for pruning, and filters such as `prime < 1e9` or `number < 1e5` are now pushed down for the `primes()` and `numbers()` table functions instead of causing unbounded execution. Closes [#85167](https://github.com/ClickHouse/ClickHouse/issues/85167). [#98516](https://github.com/ClickHouse/ClickHouse/pull/98516) ([Nihal Z. Miaji](https://github.com/nihalzp)).
- Added a new SLRU cache for Parquet metadata to improve read performance by removing the need to re-download files just to read metadata. [#98140](https://github.com/ClickHouse/ClickHouse/pull/98140) ([Grant Holly](https://github.com/grantholly-clickhouse)).
- Support swapping sides of ANTI, SEMI and FULL joins based on optimizer statistics. [#97498](https://github.com/ClickHouse/ClickHouse/pull/97498) ([Hechem Selmi](https://github.com/m-selmi)).
- Optimize granules skipping for `pointInPolygon` for large polygons and fix `pointInPolygon` index analysis throwing during primary key pruning. [#91633](https://github.com/ClickHouse/ClickHouse/pull/91633) ([Nihal Z. Miaji](https://github.com/nihalzp)).
- Improve performance of `levenshteinDistance` function. [#94543](https://github.com/ClickHouse/ClickHouse/pull/94543) ([Joanna Hulboj](https://github.com/jh0x)).
- Optimize batch decimal type conversions by avoiding per-element function calls. [#95923](https://github.com/ClickHouse/ClickHouse/pull/95923) ([Konstantin Bogdanov](https://github.com/thevar1able)).
- Iceberg tables now support asynchronous metadata prefetching via `iceberg_metadata_async_prefetch_period_ms` table setting, which periodically pre-populates the metadata cache. Additionally, the `iceberg_metadata_staleness_ms` query setting allows SELECT queries to use cached metadata if it is fresher than the specified staleness, eliminating calls to the Iceberg catalog during request processing. [#96191](https://github.com/ClickHouse/ClickHouse/pull/96191) ([Arsen Muk](https://github.com/arsenmuk)).
- `S3Queue` ordered mode uses S3 ListObjectsV2 StartAfter to avoid re-listing full prefix history, reducing ListObjects calls. [#96370](https://github.com/ClickHouse/ClickHouse/pull/96370) ([Venkata Vineel](https://github.com/vyalamar) ).
- Lower memory usage for inserts deduplication. In general the original block is needed for deduplication, but for sync insert we could omit it and save the memory for good. [#96661](https://github.com/ClickHouse/ClickHouse/pull/96661) ([Sema Checherinda](https://github.com/CheSema)).
- Use an arch-specific value for cache line size instead of a hardcoded value of 64. [#97357](https://github.com/ClickHouse/ClickHouse/pull/97357) ([Nikita Taranov](https://github.com/nickitat)).
- Slightly optimized reading from the text index dictionary, improving the overall performance of text index analysis. [#97519](https://github.com/ClickHouse/ClickHouse/pull/97519) ([Anton Popov](https://github.com/CurtizJ)).
- Speed up `LZ4` decompression of 16 byte blocks in ARM. [#97774](https://github.com/ClickHouse/ClickHouse/pull/97774) ([Raúl Marín](https://github.com/Algunenano)).
- Refactor tokenization to a new high-performance interface, replacing the old iterator-style API to support SIMD and stateful tokenizers. Part of [#90268](https://github.com/ClickHouse/ClickHouse/issues/90268). [#97871](https://github.com/ClickHouse/ClickHouse/pull/97871) ([Amos Bird](https://github.com/amosbird)).
- Improved performance of text index analysis for queries with combined conditions involving both indexed and non-indexed columns. Previously, early exit optimization during index analysis was incorrectly disabled in such cases. [#98096](https://github.com/ClickHouse/ClickHouse/pull/98096) ([Anton Popov](https://github.com/CurtizJ)).
- Improve the performance of queries with constant expressions that generate very long arrays or maps. [#98287](https://github.com/ClickHouse/ClickHouse/pull/98287) ([Alexey Milovidov](https://github.com/alexey-milovidov)).
- Fix key condition analysis for `DateTime64` primary keys compared with integer constants, which previously resulted in no granule pruning. [#98410](https://github.com/ClickHouse/ClickHouse/pull/98410) ([Amos Bird](https://github.com/amosbird)).
- The setting `optimize_syntax_fuse_functions` is enabled by default. [#98424](https://github.com/ClickHouse/ClickHouse/pull/98424) ([Alexey Milovidov](https://github.com/alexey-milovidov)).
- Optimize `avgWeighted` aggregate function by using local accumulators instead of per-row store-forwarding through aggregate state, improving performance by up to 27% for Nullable inputs. [#98793](https://github.com/ClickHouse/ClickHouse/pull/98793) ([Antonio Andelic](https://github.com/antonio2368)).
- Improves performance and reduces memory usage for parallel window functions in certain scenarios, and for `arrayFold` workloads with large arrays. This can also reduce page-fault pressure and improve stability under tight memory limits for affected queries. [#98892](https://github.com/ClickHouse/ClickHouse/pull/98892) ([filimonov](https://github.com/filimonov)).
- Improve performance of sorted merges. [#99013](https://github.com/ClickHouse/ClickHouse/pull/99013) ([Artem Zuikov](https://github.com/4ertus2)).
- Optimize `INTERSECT ALL` and `EXCEPT ALL`. [#99097](https://github.com/ClickHouse/ClickHouse/pull/99097) ([Raufs Dunamalijevs](https://github.com/rienath)).
- Support the `read_in_order_use_virtual_row` optimization for reverse-order reads. [#99198](https://github.com/ClickHouse/ClickHouse/pull/99198) ([Vladimir Cherkasov](https://github.com/vdimir)).
- Reduce cache contention in `RIGHT` and `FULL` JOINs by checking if JoinUsedFlags is set before writing. [#99274](https://github.com/ClickHouse/ClickHouse/pull/99274) ([Hechem Selmi](https://github.com/m-selmi)).