All checks were successful
Deploy tt-tagebuch / deploy (push) Successful in 54s
- Changed file permissions from 644 to 755 for various files in the mobile-app and mobile-app_legacy_rn_expo directories, ensuring executable permissions where necessary. - Added a new SQL migration script to the backend to introduce missing columns for club billing and invoice settings in the clubs table, maintaining synchronization with the current Sequelize model.
126 lines
4.6 KiB
SQL
Executable File
126 lines
4.6 KiB
SQL
Executable File
-- Intelligentes Cleanup-Script - Ermittelt echte INDEX-Namen und entfernt diese
|
|
-- Behält nur PRIMARY KEY und UNIQUE constraints
|
|
|
|
USE trainingsdiary;
|
|
|
|
-- 1. Status vor dem intelligenten Cleanup
|
|
SELECT '=== STATUS VOR INTELLIGENTEM 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 (mit echten Namen)
|
|
SELECT '=== MEMBER TABELLE INDEX (ECHTE NAMEN) ===' as info;
|
|
SHOW INDEX FROM member;
|
|
|
|
SELECT '=== DIARY_TAGS TABELLE INDEX (ECHTE NAMEN) ===' as info;
|
|
SHOW INDEX FROM diary_tags;
|
|
|
|
SELECT '=== SEASON TABELLE INDEX (ECHTE NAMEN) ===' as info;
|
|
SHOW INDEX FROM season;
|
|
|
|
-- 3. Alle INDEX-Namen extrahieren und DROP-Befehle generieren
|
|
SELECT '=== GENERIERE DROP-BEFEHLE FÜR ÜBERFLÜSSIGE INDEX ===' as info;
|
|
|
|
-- Member-Tabelle: Alle INDEX außer PRIMARY entfernen
|
|
SELECT '=== ENTFERNE ÜBERFLÜSSIGE MEMBER INDEX ===' as info;
|
|
|
|
-- Verwende die echten INDEX-Namen aus SHOW INDEX
|
|
-- Entferne alle außer PRIMARY KEY (PRIMARY kann nicht gelöscht werden)
|
|
|
|
-- Beispiel für häufige überflüssige INDEX-Namen (basierend auf Sequelize-Konventionen)
|
|
-- Diese werden nur ausgeführt, wenn sie existieren
|
|
|
|
-- Häufige überflüssige INDEX-Namen
|
|
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 ÜBERFLÜSSIGE 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 ÜBERFLÜSSIGE 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 intelligenten Cleanup
|
|
SELECT '=== STATUS NACH INTELLIGENTEM 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_intelligent_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
|
|
'Intelligentes Cleanup abgeschlossen. Überprüfen Sie die Anzahl der Keys oben.' as message;
|