From ee8e24ffc646ee4a2067f508ed0de365294a8600 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Mon, 25 May 2026 10:55:10 +0700 Subject: [PATCH] perf(db): add revision and module query indexes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Индексы для diff/list префиксов и сортировки модулей; covering index для pagination. Co-authored-by: Cursor --- .../postgres/000014_query_indexes.down.sql | 6 ++++++ migrations/postgres/000014_query_indexes.up.sql | 17 +++++++++++++++++ migrations/sqlite/000014_query_indexes.down.sql | 3 +++ migrations/sqlite/000014_query_indexes.up.sql | 9 +++++++++ 4 files changed, 35 insertions(+) create mode 100644 migrations/postgres/000014_query_indexes.down.sql create mode 100644 migrations/postgres/000014_query_indexes.up.sql create mode 100644 migrations/sqlite/000014_query_indexes.down.sql create mode 100644 migrations/sqlite/000014_query_indexes.up.sql diff --git a/migrations/postgres/000014_query_indexes.down.sql b/migrations/postgres/000014_query_indexes.down.sql new file mode 100644 index 0000000..24ee589 --- /dev/null +++ b/migrations/postgres/000014_query_indexes.down.sql @@ -0,0 +1,6 @@ +DROP INDEX IF EXISTS idx_rev_mat_prefix_uniq; +DROP INDEX IF EXISTS idx_rev_mat_prefix_rev_cover; +CREATE INDEX IF NOT EXISTS idx_rev_mat_prefix_rev_id + ON revision_materialized_prefix (revision_id, id); +DROP INDEX IF EXISTS idx_module_tenant_active_sort; +DROP INDEX IF EXISTS idx_rev_mat_prefix_rev_prefix; diff --git a/migrations/postgres/000014_query_indexes.up.sql b/migrations/postgres/000014_query_indexes.up.sql new file mode 100644 index 0000000..cae8b7c --- /dev/null +++ b/migrations/postgres/000014_query_indexes.up.sql @@ -0,0 +1,17 @@ +-- Query indexes: revision diff/list and module sort (H4 + M4). + +CREATE INDEX IF NOT EXISTS idx_rev_mat_prefix_rev_prefix + ON revision_materialized_prefix (revision_id, prefix); + +CREATE INDEX IF NOT EXISTS idx_module_tenant_active_sort + ON module (tenant_id, priority, name) + WHERE deleted_at IS NULL; + +-- Covering index for prefix list pagination (PostgreSQL 11+ INCLUDE). +DROP INDEX IF EXISTS idx_rev_mat_prefix_rev_id; +CREATE INDEX IF NOT EXISTS idx_rev_mat_prefix_rev_cover + ON revision_materialized_prefix (revision_id, id) + INCLUDE (prefix, community_id, source); + +CREATE UNIQUE INDEX IF NOT EXISTS idx_rev_mat_prefix_uniq + ON revision_materialized_prefix (revision_id, prefix, community_id, source); diff --git a/migrations/sqlite/000014_query_indexes.down.sql b/migrations/sqlite/000014_query_indexes.down.sql new file mode 100644 index 0000000..88dd0df --- /dev/null +++ b/migrations/sqlite/000014_query_indexes.down.sql @@ -0,0 +1,3 @@ +DROP INDEX IF EXISTS idx_rev_mat_prefix_uniq; +DROP INDEX IF EXISTS idx_module_tenant_active_sort; +DROP INDEX IF EXISTS idx_rev_mat_prefix_rev_prefix; diff --git a/migrations/sqlite/000014_query_indexes.up.sql b/migrations/sqlite/000014_query_indexes.up.sql new file mode 100644 index 0000000..5236e05 --- /dev/null +++ b/migrations/sqlite/000014_query_indexes.up.sql @@ -0,0 +1,9 @@ +CREATE INDEX IF NOT EXISTS idx_rev_mat_prefix_rev_prefix + ON revision_materialized_prefix (revision_id, prefix); + +CREATE INDEX IF NOT EXISTS idx_module_tenant_active_sort + ON module (tenant_id, priority, name) + WHERE deleted_at IS NULL; + +CREATE UNIQUE INDEX IF NOT EXISTS idx_rev_mat_prefix_uniq + ON revision_materialized_prefix (revision_id, prefix, community_id, source);