From: Matt Corallo Date: Wed, 14 Sep 2022 19:22:49 +0000 (+0000) Subject: Drop useless indexes, add (very) useful indxes after benchmarking X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=fe8ccaffbdeb235b054a975706a7e70b667cf181;p=rapid-gossip-sync-server Drop useless indexes, add (very) useful indxes after benchmarking --- diff --git a/src/config.rs b/src/config.rs index b9f26b3..3ed4be1 100644 --- a/src/config.rs +++ b/src/config.rs @@ -11,7 +11,7 @@ use crate::hex_utils; use futures::stream::{FuturesUnordered, StreamExt}; -pub(crate) const SCHEMA_VERSION: i32 = 7; +pub(crate) const SCHEMA_VERSION: i32 = 8; pub(crate) const SNAPSHOT_CALCULATION_INTERVAL: u32 = 3600 * 24; // every 24 hours, in seconds pub(crate) const DOWNLOAD_NEW_GOSSIP: bool = true; @@ -79,12 +79,9 @@ pub(crate) fn db_channel_update_table_creation_query() -> &'static str { pub(crate) fn db_index_creation_query() -> &'static str { " - CREATE INDEX IF NOT EXISTS channels_seen ON channel_announcements(seen); - CREATE INDEX IF NOT EXISTS channel_updates_scid ON channel_updates(short_channel_id); - CREATE INDEX IF NOT EXISTS channel_updates_direction ON channel_updates (short_channel_id, direction); - CREATE INDEX IF NOT EXISTS channel_updates_seen ON channel_updates(seen); - CREATE INDEX IF NOT EXISTS channel_updates_scid_seen ON channel_updates(short_channel_id, seen); - CREATE INDEX IF NOT EXISTS channel_updates_scid_dir_seen ON channel_updates(short_channel_id ASC, direction ASC, seen DESC); + CREATE INDEX IF NOT EXISTS channel_updates_scid_seen ON channel_updates(short_channel_id, seen) INCLUDE (blob_signed); + CREATE INDEX IF NOT EXISTS channel_updates_seen_scid ON channel_updates(seen, short_channel_id); + CREATE INDEX IF NOT EXISTS channel_updates_scid_dir_seen ON channel_updates(short_channel_id ASC, direction ASC, seen DESC) INCLUDE (id, blob_signed); CREATE UNIQUE INDEX IF NOT EXISTS channel_updates_key ON channel_updates (short_channel_id, direction, timestamp); " } @@ -126,8 +123,6 @@ pub(crate) async fn upgrade_db(schema: i32, client: &mut tokio_postgres::Client) } while let Some(_) = updates.next().await { } } - tx.execute("CREATE INDEX channel_updates_scid ON channel_updates(short_channel_id)", &[]).await.unwrap(); - tx.execute("CREATE INDEX channel_updates_direction ON channel_updates (short_channel_id, direction)", &[]).await.unwrap(); tx.execute("ALTER TABLE channel_updates ALTER short_channel_id DROP DEFAULT", &[]).await.unwrap(); tx.execute("ALTER TABLE channel_updates ALTER short_channel_id SET NOT NULL", &[]).await.unwrap(); tx.execute("ALTER TABLE channel_updates ALTER direction DROP DEFAULT", &[]).await.unwrap(); @@ -190,6 +185,17 @@ pub(crate) async fn upgrade_db(schema: i32, client: &mut tokio_postgres::Client) tx.execute("UPDATE config SET db_schema = 7 WHERE id = 1", &[]).await.unwrap(); tx.commit().await.unwrap(); } + if schema >= 1 && schema <= 7 { + let tx = client.transaction().await.unwrap(); + tx.execute("DROP INDEX channels_seen", &[]).await.unwrap(); + tx.execute("DROP INDEX channel_updates_scid", &[]).await.unwrap(); + tx.execute("DROP INDEX channel_updates_direction", &[]).await.unwrap(); + tx.execute("DROP INDEX channel_updates_seen", &[]).await.unwrap(); + tx.execute("DROP INDEX channel_updates_scid_seen", &[]).await.unwrap(); + tx.execute("DROP INDEX channel_updates_scid_dir_seen", &[]).await.unwrap(); + tx.execute("UPDATE config SET db_schema = 8 WHERE id = 1", &[]).await.unwrap(); + tx.commit().await.unwrap(); + } if schema <= 1 || schema > SCHEMA_VERSION { panic!("Unknown schema in db: {}, we support up to {}", schema, SCHEMA_VERSION); }