From a85f6ba15a95f560a0f567a4a2ec411101b3c3de Mon Sep 17 00:00:00 2001 From: Kevin Adametz Date: Tue, 1 Sep 2026 11:08:06 +0000 Subject: [PATCH] db: Index auf companies.email MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit companies trug bisher nur (portal, slug), (portal, is_active), (created_at, id) und einen FULLTEXT über (name, email, slug). Ein FULLTEXT-Index beantwortet aber kein WHERE email = ? — jede Suche über die Firmen-E-Mail war ein voller Tabellendurchlauf. Gebraucht wird der Index für die Newsroom-Konsolidierung: Die schlüsselt ausdrücklich über die Firmen-E-Mail, nicht über die Pressekontaktadresse, und die laufende Zuordnung neuer API-Meldungen führt diesen Lookup bei jeder Einreichung aus. Bewusst nur email statt (portal, email) — die Adresse ist hochselektiv, die Portal-Einschränkung kostet danach nichts mehr, und derselbe Index trägt zusätzlich die portalübergreifende Gruppierung des Trockenlauf-Berichts. ADD INDEX läuft bei InnoDB auch mit vorhandenem FULLTEXT-Index INPLACE, anders als ADD COLUMN. Co-Authored-By: Claude Opus 5 (1M context) --- ...000_add_email_index_to_companies_table.php | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 database/migrations/2026_09_01_091000_add_email_index_to_companies_table.php diff --git a/database/migrations/2026_09_01_091000_add_email_index_to_companies_table.php b/database/migrations/2026_09_01_091000_add_email_index_to_companies_table.php new file mode 100644 index 00000000..4bd8c3d3 --- /dev/null +++ b/database/migrations/2026_09_01_091000_add_email_index_to_companies_table.php @@ -0,0 +1,46 @@ +index('email', 'companies_email_idx'); + }); + } + } + + public function down(): void + { + Schema::table('companies', function (Blueprint $table) { + $table->dropIndex('companies_email_idx'); + }); + } +};