Skip to main content

Indexes

Indexes enable efficient querying of table data. SpacetimeDB supports B-Tree indexes on single or multiple columns.

Single-Column Indexes

#[spacetimedb::table(name = user, public)]
pub struct User {
    #[primary_key]
    id: u32,
    #[index(btree)]
    name: String,
}

// Query using the index
for user in ctx.db.user().name().filter("Alice") {
    // users with name == "Alice"
}

Multi-Column Indexes

#[spacetimedb::table(name = score, public)]
#[spacetimedb::index(name = by_player_and_level, btree(columns = [player_id, level]))]
pub struct Score {
    player_id: u32,
    level: u32,
    points: i64,
}

// Query with prefix match
for score in ctx.db.score().by_player_and_level().filter(&123) {
    // scores with player_id == 123
}