Skip to main content

BTree Index

BTree index builds a logical B-tree structure over SST files, enabling efficient point lookups and range queries on scalar columns. Use it for selective predicates on scalar columns such as identifiers, timestamps, categories with many distinct values, or other columns frequently used in WHERE clauses.

Supported predicate shapes include:

PredicateExample
Equalityname = 'a200'
INname IN ('a200', 'a300')
Rangeprice >= 10 AND price < 100
Null checksname IS NOT NULL
AND / OR combinationsname = 'a200' OR name = 'a300'

LIKE, startsWith, contains, and NOT IN predicates may still need broader index file reads. Use btree-index.fallback-scan-max-size to cap fallback range and string scans by the total candidate index file size. For keyword-style text retrieval, use Full-Text Index instead.

Build BTree Index

-- Create BTree index on 'name' column
CALL sys.create_global_index(
table => 'db.my_table',
index_column => 'name',
index_type => 'btree'
);

You can build only selected partitions:

CALL sys.create_global_index(
table => 'db.my_table',
index_column => 'name',
index_type => 'btree',
partitions => 'dt=2026-06-18;dt=2026-06-19'
);

BTree Options

OptionDefaultDescription
sorted-index.records-per-range10000000Expected number of records per sorted global index file for BTree and Bitmap builds.
sorted-index.build.max-parallelism4096Maximum Flink or Spark parallelism for building sorted global indexes.
btree-index.block-size64 kbBlock size used by BTree index files.
btree-index.cache-size128 mbCache size used by BTree index readers.
btree-index.fallback-scan-max-size256 mbMaximum total size of candidate BTree global index files to allow fallback index scans. Set to 0 b to disable fallback scans.
btree-index.compressionnoneCompression algorithm used by BTree index blocks.

The legacy btree-index.records-per-range and btree-index.build.max-parallelism keys are still recognized as fallback keys.

Query with BTree Index

Once a BTree index is built, it is automatically used during scan when a filter predicate matches the indexed column.

SELECT * FROM my_table WHERE name IN ('a200', 'a300');