From 24acd05d4e8a0b16e056a85def84064e24a37640 Mon Sep 17 00:00:00 2001 From: n-dusan Date: Sat, 29 Jun 2024 20:03:50 +0200 Subject: [PATCH] fix(db): add more indexes to optimize versions endpoint performance For document or collection versions we want the query times to be really fast. Since for both types of queries we do LEFT JOINS to retrieve relevant versions, index the `publication_version` and `publication_has_publication_versions` ids. Add a couple of additional indexes for the `document_change` and `library_change` tables. --- migrations/sqlite/20240115152953_initial_db.down.sql | 10 ++++++++++ migrations/sqlite/20240115152953_initial_db.up.sql | 12 ++++++++++++ 2 files changed, 22 insertions(+) diff --git a/migrations/sqlite/20240115152953_initial_db.down.sql b/migrations/sqlite/20240115152953_initial_db.down.sql index f6141c9..2291a76 100644 --- a/migrations/sqlite/20240115152953_initial_db.down.sql +++ b/migrations/sqlite/20240115152953_initial_db.down.sql @@ -2,8 +2,18 @@ PRAGMA foreign_keys = OFF; DROP INDEX IF EXISTS changed_library_document_library_mpath_idx; +DROP INDEX IF EXISTS library_change_status_idx; DROP INDEX IF EXISTS library_change_library_mpath_idx; + +DROP INDEX IF EXISTS publication_version_id_idx; + +DROP INDEX IF EXISTS publication_has_publication_versions_publication_version_id_idx; +DROP INDEX IF EXISTS publication_has_publication_versions_publication_id_idx; + +DROP INDEX IF EXISTS document_change_status_idx; +DROP INDEX IF EXISTS document_change_publication_version_id_idx; DROP INDEX IF EXISTS document_change_doc_mpath_idx; +DROP INDEX IF EXISTS document_change_doc_mpath_pub_id_status_idx; DROP TABLE IF EXISTS changed_library_document; DROP TABLE IF EXISTS library_change; diff --git a/migrations/sqlite/20240115152953_initial_db.up.sql b/migrations/sqlite/20240115152953_initial_db.up.sql index 8d10d78..0a855d1 100644 --- a/migrations/sqlite/20240115152953_initial_db.up.sql +++ b/migrations/sqlite/20240115152953_initial_db.up.sql @@ -82,7 +82,17 @@ CREATE TABLE document_change ( ON DELETE CASCADE, PRIMARY KEY (id) ); + +CREATE INDEX document_change_doc_mpath_pub_id_status_idx ON document_change(doc_mpath COLLATE NOCASE, publication_version_id, status); CREATE INDEX document_change_doc_mpath_idx ON document_change(doc_mpath COLLATE NOCASE); +CREATE INDEX document_change_publication_version_id_idx ON document_change(publication_version_id); +CREATE INDEX document_change_status_idx ON document_change(status); + +CREATE INDEX publication_has_publication_versions_publication_id_idx ON publication_has_publication_versions(publication_id); +CREATE INDEX publication_has_publication_versions_publication_version_id_idx ON publication_has_publication_versions(publication_version_id); + +CREATE INDEX publication_version_id_idx ON publication_version(id); + CREATE TABLE library_change ( publication_version_id TEXT, status TEXT, @@ -103,6 +113,8 @@ CREATE TABLE changed_library_document ( PRIMARY KEY (document_change_id, library_mpath) ); CREATE INDEX library_change_library_mpath_idx ON library_change(library_mpath COLLATE NOCASE); +CREATE INDEX library_change_status_idx ON library_change(status); + CREATE INDEX changed_library_document_library_mpath_idx ON changed_library_document(library_mpath COLLATE NOCASE); PRAGMA optimize; \ No newline at end of file