New Features π
- Added support for aggregate score joins, enabling queries to
ORDER BYa sum of scores across joined tables. - Added
paradedb.vector_clustersto inspect per-cluster posting list sizes and ball-bound radii for vector indexes.
Performance Improvements π
- Cross-table disjunctive search predicates (e.g.
a.text @@@ 'foo' OR b.text @@@ 'bar') now evaluate via predicate tagging rather than UDFs, improving low-selectivity disjunctive join query performance by up to 22x. - MPP self-loops across stages on the same worker now communicate over an in-memory channel, eliminating in-process serialization overhead.
- Dynamic shared memory (DSM) allocation for parallel index scans on PostgreSQL 15β17 now sizes EXPLAIN info slots only when used, reducing shared memory overhead from ~66MB to ~2MB.
- Eliminated redundant eager planning passes in AggregateScan and JoinScan, sizing DSM allocations directly from physical stages.
- Gate MPP execution behind a minimum row count, configurable via
paradedb.mpp_min_rows.
Stability Improvements πͺ
- Parallel MPP worker scans and leader consumers now replay the leadersβs segment view and mutable segment bounds.
- AggregateScan now validates collation semantics during
GROUP BYpushdown, falling back to PostgreSQL for non-deterministic collations andGROUPING SETS. - Plain
EXPLAINnow matches runtime behavior by rendering the serial execution plan when task discovery finds fewer than 2 parallel tasks. - Dynamic filter pushdown is now tracked and reported via metrics across MPP execution stages.
EXPLAINplans for the aggregate and join scan now display the table name or alias.