From bf9b66358139926ea12964265f082c2051aee4b6 Mon Sep 17 00:00:00 2001 From: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com> Date: Thu, 23 Apr 2026 00:02:00 +0700 Subject: [PATCH] Optimize database indexes and clean up schema (#1603) * Update `excluded_scanlators` index to a composite index on `manga_id` and `scanlator`. * Convert `idx_history_last_read` into a partial index for entries where `last_read > 0`. * Remove redundant `idx_manga_sync_manga_id` index. * Remove unused `last_modified_at` column and its associated trigger from `mangas_categories`. * Sync migration files with schema changes. --- .../main/sqldelight/tachiyomi/data/excluded_scanlators.sq | 3 +-- data/src/main/sqldelight/tachiyomi/data/history.sq | 2 +- data/src/main/sqldelight/tachiyomi/data/manga_sync.sq | 2 -- data/src/main/sqldelight/tachiyomi/migrations/45.sqm | 6 +++--- 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/data/src/main/sqldelight/tachiyomi/data/excluded_scanlators.sq b/data/src/main/sqldelight/tachiyomi/data/excluded_scanlators.sq index 37ed6489e..aced54fb2 100644 --- a/data/src/main/sqldelight/tachiyomi/data/excluded_scanlators.sq +++ b/data/src/main/sqldelight/tachiyomi/data/excluded_scanlators.sq @@ -5,8 +5,7 @@ CREATE TABLE excluded_scanlators( ON DELETE CASCADE ); -CREATE INDEX excluded_scanlators_manga_id_index ON excluded_scanlators(manga_id); -CREATE INDEX idx_excluded_scanlators_scanlator ON excluded_scanlators(scanlator); +CREATE INDEX idx_excluded_scanlators_manga_id_scanlator ON excluded_scanlators(manga_id, scanlator); insert: INSERT INTO excluded_scanlators(manga_id, scanlator) diff --git a/data/src/main/sqldelight/tachiyomi/data/history.sq b/data/src/main/sqldelight/tachiyomi/data/history.sq index 569f44967..8677577f4 100644 --- a/data/src/main/sqldelight/tachiyomi/data/history.sq +++ b/data/src/main/sqldelight/tachiyomi/data/history.sq @@ -10,7 +10,7 @@ CREATE TABLE history( ); CREATE INDEX history_history_chapter_id_index ON history(chapter_id); -CREATE INDEX idx_history_last_read ON history(last_read); +CREATE INDEX idx_history_last_read ON history(last_read) WHERE last_read > 0; getHistoryByMangaId: SELECT diff --git a/data/src/main/sqldelight/tachiyomi/data/manga_sync.sq b/data/src/main/sqldelight/tachiyomi/data/manga_sync.sq index d14b7125c..44fa0570b 100644 --- a/data/src/main/sqldelight/tachiyomi/data/manga_sync.sq +++ b/data/src/main/sqldelight/tachiyomi/data/manga_sync.sq @@ -20,8 +20,6 @@ CREATE TABLE manga_sync( ON DELETE CASCADE ); -CREATE INDEX idx_manga_sync_manga_id ON manga_sync(manga_id); - delete: DELETE FROM manga_sync WHERE manga_id = :mangaId AND sync_id = :syncId; diff --git a/data/src/main/sqldelight/tachiyomi/migrations/45.sqm b/data/src/main/sqldelight/tachiyomi/migrations/45.sqm index bdeb188fc..2614232b4 100644 --- a/data/src/main/sqldelight/tachiyomi/migrations/45.sqm +++ b/data/src/main/sqldelight/tachiyomi/migrations/45.sqm @@ -4,6 +4,6 @@ CREATE INDEX IF NOT EXISTS idx_mangas_source ON mangas(source); CREATE INDEX IF NOT EXISTS idx_chapters_url ON chapters(url); CREATE INDEX IF NOT EXISTS idx_mangas_categories_manga_id ON mangas_categories(manga_id); CREATE INDEX IF NOT EXISTS idx_mangas_categories_category_id ON mangas_categories(category_id); -CREATE INDEX IF NOT EXISTS idx_excluded_scanlators_scanlator ON excluded_scanlators(scanlator); -CREATE INDEX IF NOT EXISTS idx_manga_sync_manga_id ON manga_sync(manga_id); -CREATE INDEX IF NOT EXISTS idx_history_last_read ON history(last_read); +DROP INDEX IF EXISTS excluded_scanlators_manga_id_index; +CREATE INDEX IF NOT EXISTS idx_excluded_scanlators_manga_id_scanlator ON excluded_scanlators(manga_id, scanlator); +CREATE INDEX IF NOT EXISTS idx_history_last_read ON history(last_read) WHERE last_read > 0;