2025 Changelog

#### Performance Improvement[​](#performance-improvement-1 "Direct link to Performance Improvement")

- Parquet reader v3 is enabled by default. [#88827](https://github.com/ClickHouse/ClickHouse/pull/88827) ([Michael Kolupaev](https://github.com/al13n321)).
- Distributed execution: better split tasks by row groups IDs, not by files. [#87508](https://github.com/ClickHouse/ClickHouse/pull/87508) ([scanhex12](https://github.com/scanhex12)).
- `RIGHT` and `FULL` JOINs now use ConcurrentHashJoin; that means that these types of join are now running with a higher degree of parallelism. Improves various cases for RIGHT and FULL JOINs up to two times. Resolves [#78027](https://github.com/ClickHouse/ClickHouse/issues/78027). [#78462](https://github.com/ClickHouse/ClickHouse/pull/78462) ([Yarik Briukhovetskyi](https://github.com/yariks5s)).
- Optimization for large values of constant expressions in queries. Closes [#72880](https://github.com/ClickHouse/ClickHouse/issues/72880). [#81104](https://github.com/ClickHouse/ClickHouse/pull/81104) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)).
- Up to 8x faster `SELECT` queries with heavy partition pruning on tables with 10K+ parts. [#85535](https://github.com/ClickHouse/ClickHouse/pull/85535) ([James Morrison](https://github.com/jawm)).
- When a query uses fixed hash map for aggregation state (group by a small integer), ClickHouse would merge the aggregation state in parallel to speed up the query. [#87366](https://github.com/ClickHouse/ClickHouse/pull/87366) ([Jianfei Hu](https://github.com/incfly)).
- Allow using projections (that use SELECT of `_part_offset` and a different ORDER BY) as a secondary index. When enabled, certain query predicates can be used to read from projection parts and generate bitmaps to filter rows efficiently during the PREWHERE stage. This is the third step to implement projection index, following [#80343](https://github.com/ClickHouse/ClickHouse/issues/80343). [#81021](https://github.com/ClickHouse/ClickHouse/pull/81021) ([Amos Bird](https://github.com/amosbird)).
- Fix VDSO for rare Aarch64 systems and possible other arch/kernel combinations. [#86096](https://github.com/ClickHouse/ClickHouse/pull/86096) ([Tomas Hulata](https://github.com/tombokombo)).
- Improve LZ4 decompression speed by simplifying the code and tweaking the [selection algorithm](https://clickhouse.com/blog/lz4-compression-in-clickhouse#how-to-choose-the-best-algorithm). [#88360](https://github.com/ClickHouse/ClickHouse/pull/88360) ([Raúl Marín](https://github.com/Algunenano)).
- S3 partitions objects internally based on key-name prefixes and automatically scales to high request rates per partition. This change introduces two new BACKUP settings: data\_file\_name\_generator and data\_file\_name\_prefix\_length. When data\_file\_name\_generator=checksum, backup data files are named using a hash of their contents. Example: for a checksum = `abcd1234ef567890abcd1234ef567890` and `data_file_name_prefix_length = 3`, the resulting path will be: `abc/d1234ef567890abcd1234ef567890`. The resulting key distribution enhances load balancing across S3 partitions and reduces the risk of throttling. [#88418](https://github.com/ClickHouse/ClickHouse/pull/88418) ([Julia Kartseva](https://github.com/jkartseva)).
- Improved text index performance by caching dictionary blocks and using hashtables for token lookups instead of binary search. [#88786](https://github.com/ClickHouse/ClickHouse/pull/88786) ([Elmi Ahmadov](https://github.com/ahmadov)).
- Queries can now benefit from `optimize_read_in_order` and `query_plan_optimize_lazy_materialization` simultaneously. Resolves [#88767](https://github.com/ClickHouse/ClickHouse/issues/88767). [#88866](https://github.com/ClickHouse/ClickHouse/pull/88866) ([Manuel](https://github.com/raimannma)).
- Use aggregate projection for queries with `DISTINCT`. Closes [#86925](https://github.com/ClickHouse/ClickHouse/issues/86925). [#88894](https://github.com/ClickHouse/ClickHouse/pull/88894) ([Nihal Z. Miaji](https://github.com/nihalzp)).
- Caching posting lists to improve the performance in consecutive runs. [#88912](https://github.com/ClickHouse/ClickHouse/pull/88912) ([Elmi Ahmadov](https://github.com/ahmadov)).
- Run streaming LIMIT BY transform in cases when input sort order matches LIMIT BY keys. [#88969](https://github.com/ClickHouse/ClickHouse/pull/88969) ([Eduard Karacharov](https://github.com/korowa)).
- Allow rewriting `ANY LEFT JOIN` or `ANY RIGHT JOIN` to `ALL INNER JOIN` in some cases. [#89403](https://github.com/ClickHouse/ClickHouse/pull/89403) ([Dmitry Novik](https://github.com/novikd)).
- Reduce the overhead of logging: use less atomic operations per entry. [#89651](https://github.com/ClickHouse/ClickHouse/pull/89651) ([Sergei Trifonov](https://github.com/serxa)).
- When runtime filters are enabled in a query with multiple joins and multiple runtime filters are added, implement the pushdown newly added filter steps over other. [#89725](https://github.com/ClickHouse/ClickHouse/pull/89725) ([Alexander Gololobov](https://github.com/davenger)).
- Slightly speed up some `uniqExact` operations by reducing the overhead of merging hash tables. [#89727](https://github.com/ClickHouse/ClickHouse/pull/89727) ([Raúl Marín](https://github.com/Algunenano)).
- Increase the limit for lazy materialization rows from 10 to 100. [#89772](https://github.com/ClickHouse/ClickHouse/pull/89772) ([Alexey Milovidov](https://github.com/alexey-milovidov)).
- Enable setting `allow_special_serialization_kinds_in_output_formats` by default. It will lead to less memory usage and improve query speed of output of Sparse/Replicated columns in some row output formats. [#89402](https://github.com/ClickHouse/ClickHouse/pull/89402) ([Pavel Kruglov](https://github.com/Avogar)).
- Added parallelism for `ALTER TABLE ... FREEZE` queries. [#71743](https://github.com/ClickHouse/ClickHouse/pull/71743) ([Kirill](https://github.com/kirillgarbar)).
- Add cache for bcrypt authentication. [#87115](https://github.com/ClickHouse/ClickHouse/pull/87115) ([Nikolay Degterinsky](https://github.com/evillique)).
- If a skip index used in a query with `FINAL` query is on a column that is part of the primary key, the additional step to check for primary key intersection in other parts is unnecessary and now not performed. Resolves [#85897](https://github.com/ClickHouse/ClickHouse/issues/85897). [#88368](https://github.com/ClickHouse/ClickHouse/pull/88368) ([Shankar Iyer](https://github.com/shankar-iyer)).
- The optimization `enable_lazy_columns_replication` is now the default, which will save memory usage in joins. [#89316](https://github.com/ClickHouse/ClickHouse/pull/89316) ([Alexey Milovidov](https://github.com/alexey-milovidov)).
- Introduce a per-table cache of `ColumnsDescription` for parts, reducing memory usage when tables contain many parts and many columns. [#89352](https://github.com/ClickHouse/ClickHouse/pull/89352) ([Azat Khuzhin](https://github.com/azat)).
- Introduced cache for the deserialized header of the text index to reduce I/O and improve query performance. The cache can be configured via new server settings: - `text_index_header_cache_policy` - `text_index_header_cache_size` - `text_index_header_cache_max_entries` - `text_index_header_cache_size_ratio`. [#89513](https://github.com/ClickHouse/ClickHouse/pull/89513) ([Elmi Ahmadov](https://github.com/ahmadov)).

#### Improvement[​](#improvement-1 "Direct link to Improvement")