diff --git a/backend/check-knowledge-pkey.js b/backend/check-knowledge-pkey.js index 84a03f1..5f8536a 100755 --- a/backend/check-knowledge-pkey.js +++ b/backend/check-knowledge-pkey.js @@ -86,8 +86,19 @@ async function main() { }); console.log(''); + // Erklärung: Warum knowledge_pkey ungenutzt ist + const pkUnused = allIndexes.find(i => i.indexname === 'knowledge_pkey' && (i.idx_scan == null || parseInt(i.idx_scan) === 0)); + if (pkUnused) { + console.log('💡 Warum knowledge_pkey (0 Scans) ungenutzt ist:'); + console.log(' Alle Zugriffe filtern nach (character_id, product_id), nie nach id.'); + console.log(' Der PK-Index wird nur für Eindeutigkeit/Referenzen genutzt, nicht für Lookups.'); + console.log(' idx_knowledge_character_product deckt die tatsächlichen Queries ab.\n'); + } + // Prüfe ob Queries mit id (Primary Key) gemacht werden - const [idUsage] = await sequelize.query(` + let idUsage = []; + try { + const [rows] = await sequelize.query(` SELECT query, calls, @@ -99,6 +110,10 @@ async function main() { ORDER BY calls DESC LIMIT 5; `); + idUsage = rows; + } catch (e) { + console.log(' ℹ️ pg_stat_statements nicht verfügbar – keine Query-Statistik.\n'); + } if (idUsage.length > 0) { console.log('🔍 Queries die knowledge.id verwenden:'); diff --git a/backend/create-performance-indexes.js b/backend/create-performance-indexes.js index 858c52f..a0b230e 100755 --- a/backend/create-performance-indexes.js +++ b/backend/create-performance-indexes.js @@ -125,13 +125,25 @@ async function main() { console.log(` Übersprungen: ${skipped}`); console.log(` Fehler: ${errors}\n`); + // ANALYZE ausführen, damit PostgreSQL die neuen Indizes berücksichtigt + const tablesToAnalyze = [ + 'falukant_data.knowledge', + 'falukant_data.inventory', + 'falukant_data.stock', + 'falukant_data.production', + 'falukant_data.director' + ]; if (created > 0) { - console.log('💡 Tipp: Führe ANALYZE aus, damit PostgreSQL die neuen Indizes berücksichtigt:'); - console.log(' ANALYZE falukant_data.knowledge;'); - console.log(' ANALYZE falukant_data.inventory;'); - console.log(' ANALYZE falukant_data.stock;'); - console.log(' ANALYZE falukant_data.production;'); - console.log(' ANALYZE falukant_data.director;\n'); + console.log('📊 Führe ANALYZE auf betroffenen Tabellen aus...\n'); + for (const table of tablesToAnalyze) { + try { + await sequelize.query(`ANALYZE ${table};`); + console.log(` ✅ ANALYZE ${table};`); + } catch (err) { + console.log(` ⚠️ ${table}: ${err.message}`); + } + } + console.log(''); } await sequelize.close();