Choosing Indexes
Pick the right Pinot index by query pattern, data shape, and workload.
Last updated
Was this helpful?
Pick the right Pinot index by query pattern, data shape, and workload.
Use this guide when you know the query shape and need a practical recommendation.
The goal is not to enable every possible index. The goal is to keep the table config aligned with the queries that matter most.
Equality filters such as WHERE userId = '...'
Fast point lookups and selective filtering.
Stable sort-key lookups
Useful when the segment sort order matches common filters.
Verify the exact WHERE, GROUP BY, and function patterns in the query.
Check whether the column is dictionary encoded, single-value, multi-value, or JSON.
Confirm the index can be expressed in the current table config style.
Decide whether the index must exist on new segments only or should be reloaded onto existing segments.
For table-level configuration details, use Table. For an end-to-end example that applies indexes to an ingestion pipeline, use Configure indexes.
If you are validating an index choice, keep the query itself simple and representative.
Prefer the modern column-level configuration in fieldConfigList when the index supports it. Use legacy table-level settings only when you are maintaining an older table or following a migration path.
If you need to change an index on an existing table, confirm whether the change can be applied incrementally or whether the segments need to be reloaded.
This page mapped common Pinot query patterns to the indexes that usually fit them best and highlighted the checks to do before changing table config.
Open the specific index page for the workload you are tuning, then compare it with the table config and query examples for that workload.
Last updated
Was this helpful?
Was this helpful?
SELECT COUNT(*)
FROM events
WHERE userId = 'u123'SELECT campaign, SUM(impressions)
FROM events
WHERE eventDate BETWEEN 20240301 AND 20240331
GROUP BY campaignSELECT title
FROM documents
WHERE TEXT_MATCH(title, 'pinot query engine')SELECT id
FROM embeddings
WHERE VECTOR_SIMILARITY(embedding, ARRAY[0.12, 0.18, 0.33], 10)
