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.
124 lines
4.5 KiB
SQL
Executable File
124 lines
4.5 KiB
SQL
Executable File
-- 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;
|