Secondary Indexes
Indexes for ClickHouse tables
Moose lets you declare secondary/data-skipping indexes directly in your table definitions.
Moose generates the ClickHouse INDEX clauses on create and
plans ALTER TABLE ADD/DROP INDEX operations when you change them later.
When to use indexes
- Use indexes to optimize selective predicates on large tables, especially string and high-cardinality columns.
- Common types:
minmax,Set(max_rows),ngrambf_v1(...),bloom_filter.
Indexes.ts
import { OlapTable, ClickHouseEngines } from "@514labs/moose-lib"; interface Events { id: string; user: string; message: string;} export const EventsTable = new OlapTable<Events>("Events", { engine: ClickHouseEngines.MergeTree, orderByFields: ["id"], indexes: [ { name: "idx_user", expression: "user", type: "minmax", granularity: 1 }, { name: "idx_message_ngrams", expression: "message", type: "ngrambf_v1", arguments: ["3", "256", "1", "123"], granularity: 1, }, ],});How Moose applies changes
- On create, Moose emits
INDEX ...entries insideCREATE TABLE. - On change, Moose plans
ALTER TABLE DROP INDEX <name>thenADD INDEX ...if the definition changed; pure adds/drops are applied as single operations.