feat(database): add indexes for content provider and images

This commit is contained in:
Rodrigo Verdiani 2026-06-23 21:45:15 -03:00
parent abf695ff1c
commit cfcf954a4c
3 changed files with 44 additions and 3 deletions

View File

@ -0,0 +1,36 @@
package db.migration;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import javax.sql.DataSource;
import org.flywaydb.core.api.configuration.Configuration;
import org.flywaydb.core.api.migration.BaseJavaMigration;
import org.flywaydb.core.api.migration.Context;
public class V0017__AddIndexImagesObjectKey extends BaseJavaMigration {
@Override
public void migrate(Context context) throws Exception {
Configuration config = context.getConfiguration();
try (Connection conn = getFreshConnection(config);
Statement stmt = conn.createStatement()) {
stmt.execute(
"CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_images_object_key ON images(object_key)");
}
}
private Connection getFreshConnection(Configuration config) throws Exception {
DataSource dataSource = config.getDataSource();
if (dataSource != null) {
return dataSource.getConnection();
}
return DriverManager.getConnection(config.getUrl(), config.getUser(), config.getPassword());
}
@Override
public boolean canExecuteInTransaction() {
return false;
}
}

View File

@ -1,3 +1,9 @@
CREATE INDEX IF NOT EXISTS idx_manga_ingest_reviews_provider ON manga_ingest_reviews(content_provider_id);
CREATE INDEX IF NOT EXISTS idx_manga_content_provider_provider ON manga_content_provider(content_provider_id);
CREATE INDEX IF NOT EXISTS idx_manga_content_images_image ON manga_content_images(image_id);
CREATE INDEX IF NOT EXISTS idx_mangas_cover_image ON mangas(cover_image_id);
CREATE INDEX IF NOT EXISTS idx_content_providers_name ON content_providers(name);
DELETE FROM manga_ingest_reviews DELETE FROM manga_ingest_reviews
WHERE content_provider_id = (SELECT id FROM content_providers WHERE name = 'Taimu'); WHERE content_provider_id = (SELECT id FROM content_providers WHERE name = 'Taimu');
@ -5,5 +11,5 @@ DELETE FROM manga_content_provider
WHERE content_provider_id = (SELECT id FROM content_providers WHERE name = 'Taimu'); WHERE content_provider_id = (SELECT id FROM content_providers WHERE name = 'Taimu');
DELETE FROM images DELETE FROM images
WHERE id NOT IN (SELECT DISTINCT image_id FROM manga_content_images WHERE image_id IS NOT NULL) WHERE NOT EXISTS (SELECT 1 FROM manga_content_images WHERE image_id = images.id)
AND id NOT IN (SELECT DISTINCT cover_image_id FROM mangas WHERE cover_image_id IS NOT NULL); AND NOT EXISTS (SELECT 1 FROM mangas WHERE cover_image_id = images.id);

View File

@ -1 +0,0 @@
CREATE INDEX IF NOT EXISTS idx_images_object_key ON images(object_key);