db: drop idx_thread_metadata_root, a prefix of idx_thread_metadata_window

With both indexes the planner can read a thread's latest reply through the
narrower one and sort every reply. On a 20k-reply thread that cost 28ms of
the sidebar; through the window index it is one probe (0.76ms).

Signed-off-by: hMB2 <0400eb0da32afbbf16cdd1dee6ffd243587e8f3d6a2823fe7dfa95d16b002b7d@buzz.block.builderlab.xyz>
This commit is contained in:
hMB2
2026-10-07 01:55:34 -07:00
parent fc21e64de1
commit 3cb22ecd3b
2 changed files with 5 additions and 1 deletions

View File

@@ -60,5 +60,10 @@ ALTER TABLE event_mentions ADD COLUMN received_at TIMESTAMPTZ, ADD COLUMN root_i
CREATE INDEX idx_event_mentions_scope_received
ON event_mentions (community_id, pubkey_hex, channel_id, root_id, received_at);
-- idx_thread_metadata_window (0049) leads with the same columns. With both,
-- the planner can take this narrower index for a thread's latest reply and
-- then sort every reply in the thread instead of reading the first row.
DROP INDEX IF EXISTS idx_thread_metadata_root;
SELECT attach_community_write_fence('personal_read_accounts');
SELECT attach_community_write_fence('personal_read_frontiers');

View File

@@ -576,7 +576,6 @@ CREATE TABLE thread_metadata (
);
CREATE INDEX idx_thread_metadata_parent ON thread_metadata (community_id, parent_event_id);
CREATE INDEX idx_thread_metadata_root ON thread_metadata (community_id, root_event_id);
CREATE INDEX idx_thread_metadata_window
ON thread_metadata (community_id, root_event_id, event_created_at DESC, event_id ASC);
CREATE INDEX idx_thread_metadata_channel_depth