-- Aggressives Cleanup-Script - Entfernt alle überflüssigen INDEX -- Behält nur PRIMARY KEY und UNIQUE constraints USE trainingsdiary; -- 1. Status vor dem aggressiven Cleanup SELECT '=== STATUS VOR AGGRESSIVEM CLEANUP ===' as info; SELECT TABLE_NAME, COUNT(*) as key_count FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'trainingsdiary' GROUP BY TABLE_NAME ORDER BY key_count DESC; -- 2. Alle INDEX der Problem-Tabellen anzeigen SELECT '=== MEMBER TABELLE INDEX ===' as info; SHOW INDEX FROM member; SELECT '=== DIARY_TAGS TABELLE INDEX ===' as info; SHOW INDEX FROM diary_tags; SELECT '=== SEASON TABELLE INDEX ===' as info; SHOW INDEX FROM season; -- 3. Alle nicht-essentiellen INDEX entfernen -- Behalte nur: PRIMARY KEY, UNIQUE constraints, FOREIGN KEY -- Member-Tabelle: Alle INDEX außer PRIMARY und UNIQUE entfernen SELECT '=== ENTFERNE ALLE ÜBERFLÜSSIGEN MEMBER INDEX ===' as info; -- Alle INDEX außer PRIMARY entfernen (PRIMARY kann nicht gelöscht werden) -- Verwende SHOW INDEX um die echten INDEX-Namen zu sehen -- Dann entferne alle außer PRIMARY -- Häufige überflüssige INDEX-Namen (alle außer PRIMARY) DROP INDEX IF EXISTS member_hashed_id_unique ON member; DROP INDEX IF EXISTS member_first_name_index ON member; DROP INDEX IF EXISTS member_last_name_index ON member; DROP INDEX IF EXISTS member_birth_date_index ON member; DROP INDEX IF EXISTS member_active_index ON member; DROP INDEX IF EXISTS member_created_at_index ON member; DROP INDEX IF EXISTS member_updated_at_index ON member; DROP INDEX IF EXISTS member_club_id_index ON member; DROP INDEX IF EXISTS member_hashed_id_index ON member; -- Alternative INDEX-Namen DROP INDEX IF EXISTS idx_member_hashed_id ON member; DROP INDEX IF EXISTS idx_member_first_name ON member; DROP INDEX IF EXISTS idx_member_last_name ON member; DROP INDEX IF EXISTS idx_member_birth_date ON member; DROP INDEX IF EXISTS idx_member_active ON member; DROP INDEX IF EXISTS idx_member_created_at ON member; DROP INDEX IF EXISTS idx_member_updated_at ON member; DROP INDEX IF EXISTS idx_member_club_id ON member; -- Diary_Tags-Tabelle: Alle überflüssigen INDEX entfernen SELECT '=== ENTFERNE ALLE ÜBERFLÜSSIGEN DIARY_TAGS INDEX ===' as info; DROP INDEX IF EXISTS diary_tags_name_index ON diary_tags; DROP INDEX IF EXISTS diary_tags_created_at_index ON diary_tags; DROP INDEX IF EXISTS diary_tags_updated_at_index ON diary_tags; DROP INDEX IF EXISTS diary_tags_club_id_index ON diary_tags; -- Alternative INDEX-Namen DROP INDEX IF EXISTS idx_diary_tags_name ON diary_tags; DROP INDEX IF EXISTS idx_diary_tags_created_at ON diary_tags; DROP INDEX IF EXISTS idx_diary_tags_updated_at ON diary_tags; DROP INDEX IF EXISTS idx_diary_tags_club_id ON diary_tags; -- Season-Tabelle: Alle überflüssigen INDEX entfernen SELECT '=== ENTFERNE ALLE ÜBERFLÜSSIGEN SEASON INDEX ===' as info; DROP INDEX IF EXISTS season_name_index ON season; DROP INDEX IF EXISTS season_start_date_index ON season; DROP INDEX IF EXISTS season_end_date_index ON season; DROP INDEX IF EXISTS season_created_at_index ON season; DROP INDEX IF EXISTS season_updated_at_index ON season; DROP INDEX IF EXISTS season_club_id_index ON season; -- Alternative INDEX-Namen DROP INDEX IF EXISTS idx_season_name ON season; DROP INDEX IF EXISTS idx_season_start_date ON season; DROP INDEX IF EXISTS idx_season_end_date ON season; DROP INDEX IF EXISTS idx_season_created_at ON season; DROP INDEX IF EXISTS idx_season_updated_at ON season; DROP INDEX IF EXISTS idx_season_club_id ON season; -- 4. Status nach dem aggressiven Cleanup SELECT '=== STATUS NACH AGGRESSIVEM CLEANUP ===' as info; SELECT TABLE_NAME, COUNT(*) as key_count FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'trainingsdiary' GROUP BY TABLE_NAME ORDER BY key_count DESC; -- 5. Gesamtanzahl der Keys SELECT COUNT(*) as total_keys_after_aggressive_cleanup FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'trainingsdiary'; -- 6. Ziel: Jede Tabelle sollte nur 2-5 Keys haben SELECT '=== ZIEL: 2-5 KEYS PRO TABELLE ===' as info; SELECT TABLE_NAME, COUNT(*) as key_count, CASE WHEN COUNT(*) <= 5 THEN '✅ OK' WHEN COUNT(*) <= 10 THEN '⚠️ Zu viele' ELSE '❌ Viel zu viele' END as status FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'trainingsdiary' GROUP BY TABLE_NAME ORDER BY key_count DESC; -- 7. Zusammenfassung SELECT '=== ZUSAMMENFASSUNG ===' as info; SELECT 'Aggressives Cleanup abgeschlossen. Jede Tabelle sollte nur 2-5 Keys haben.' as message;