Overview and Purpose
The MinMax index is a lightweight, coarse-grained index that divides a sorted column into fixed-size chunks of documents and records the minimum and maximum value of each chunk. At query time it uses binary search over these boundaries to skip chunks that cannot match a filter, then runs an exact forward-index scan only on the surviving (“candidate”) chunks.When to use it
Use the MinMax index for large sorted raw columns where you frequently filter with equality or range predicates and want to reduce the number of documents scanned. It is especially useful for wide variable-width columns (STRING, BYTES, BIG_DECIMAL) where scanning every value is expensive. The index only helps with EQ, IN, and RANGE predicates; other predicate types are not routed through it.
The index is especially useful for:
- Time or sequence columns that are sorted during ingestion.
- High-cardinality columns where a full inverted index would be too large.
- Equality,
IN, and range predicates on sorted raw columns. - Object-store backed segments where pruning chunks also reduces remote reads.
This page covers the StarTree
minmax index configured on a field. It is different from Pinot’s segment-level columnMinMaxValueGeneratorMode, which writes whole-segment min/max metadata for segment pruning.Availability
The Min/Max index is available in StarTree release 0.15 and later. The corresponding STP release branch isrelease/1.6.0-STP-2.164.x.
How the Index Works
For each configured column, StarTree Cloud divides the sorted raw forward index into document chunks. The Min/Max index records the minimum and maximum column value in each chunk. When a query has a predicate on that column, the server checks the predicate against the chunk boundary:- If the predicate cannot match any value in the chunk, the chunk is skipped.
- If the predicate might match the chunk, StarTree Cloud reads and evaluates the candidate rows.
- Final predicate evaluation still runs on candidate rows, so pruning does not change query results.
eventTimeMillis chunk covers values from 1764556800000 to 1764557399999, a query for eventTimeMillis >= 1764560400000 can skip that chunk immediately.
Requirements
- The column must be single-value.
- The column must be sorted in each segment.
- The column forward index must be enabled.
- The column must use
RAWencoding. chunkSize, when configured, must be a positive power of two.- Supported data types are
INT,LONG,FLOAT,DOUBLE,BIG_DECIMAL,TIMESTAMP,STRING, andBYTES.BOOLEAN,JSON, andMAPare not supported.
Configuration
To enable the Min/Max index, add aminmax index to the column’s fieldConfigList entry.
chunkSize: number of documents per chunk. If omitted, it defaults to1024. It must be a positive power of 2.
tableIndexConfig.sortedColumn so consuming segments are built in sorted order.
Configuration Parameters
Choosing chunkSize
There is no automatic per-segment derivation of chunk size — the optimal value depends on data type, cardinality, and query shape. Smaller chunks give finer pruning (fewer rows scanned per surviving chunk) but a larger index; larger chunks give a smaller index but coarser pruning. Variable-width columns (STRING/BYTES/BIG_DECIMAL) scan more bytes per chunk, so they may benefit from smaller chunks.
Query Examples
The Min/Max index can prune chunks for range predicates:IN predicates:
Performance Considerations
- Sort quality matters: The index is only useful when values are sorted or highly clustered. Unsorted data produces wide chunk boundaries and weak pruning.
- Chunk size is the main tuning knob: Smaller chunks usually reduce scanned rows, while larger chunks reduce index size.
- Use with raw forward indexes: The index targets raw forward-index reads. Use a range or inverted index instead for dictionary-encoded columns when those indexes fit your workload better.
- Reload existing segments: After adding the index to an existing table, reload segments so StarTree Cloud builds the new index files.

