composite index for channel/seq_id
This commit is contained in:
@@ -180,7 +180,7 @@ pub struct Reaction {
|
||||
pub custom_emoji_id: Option<u64>,
|
||||
}
|
||||
|
||||
#[spacetimedb::table(accessor = message)]
|
||||
#[spacetimedb::table(accessor = message, index(accessor = channel_seq, btree(columns = [channel_id, seq_id])))]
|
||||
#[derive(Clone)]
|
||||
pub struct Message {
|
||||
#[primary_key]
|
||||
|
||||
@@ -81,16 +81,14 @@ pub fn visible_recent_activity(ctx: &ViewContext) -> Vec<Message> {
|
||||
let limit = get_recent_message_limit_read_only(&ctx.db);
|
||||
let min_seq = if last_seq_id > limit { last_seq_id - (limit - 1) } else { 1 };
|
||||
|
||||
for msg in ctx.db.message().channel_id().filter(access.channel_id) {
|
||||
if msg.seq_id >= min_seq {
|
||||
results.push(msg.clone());
|
||||
}
|
||||
// HIGH PERFORMANCE: Uses composite index range scan
|
||||
for msg in ctx.db.message().channel_seq().filter((access.channel_id, min_seq..)) {
|
||||
results.push(msg.clone());
|
||||
}
|
||||
}
|
||||
|
||||
results
|
||||
}
|
||||
|
||||
#[spacetimedb::view(accessor = visible_servers, public)]
|
||||
pub fn visible_servers(ctx: &ViewContext) -> Vec<Server> {
|
||||
let identity = ctx.sender();
|
||||
|
||||
Reference in New Issue
Block a user