presseportale/resources/views/livewire/customer/press-releases
Kevin Adametz 7d6b97f3fb Perf: Status-Counts der PM-Uebersicht via UNION statt OR-GROUP-BY
Die nach Status gruppierte Zaehlung lief ueber accessibleBy() (user_id OR
company_id IN sub). Der OR-Ausdruck zwingt MySQL zu Full-Scans (EXPLAIN:
companies type=ALL, press_releases Full-Index-Scan ueber 124k Zeilen) und
war mit ~500-950ms der groesste Einzelposten der Seite.

Neue PressRelease::accessibleStatusCountsFor(User, ?Closure): kombiniert
Autor- und Firmen-Zweig als indexfreundliche UNION-Subquery (per PK
dedupliziert) und gruppiert darueber. Im Benchmark ~2,5x schneller bei
identischer Verteilung. Der Firmen-Filter der Uebersicht wird als geteilte
Closure auf Counts UND Liste angewandt (garantiert deckungsgleiche Filterung).

Gesamtmessung /admin/me/press-releases (User 14016, 26.772 Firmen / 20.830
PMs): Query-Pfad ~2850ms -> ~740ms warm; hydratisierte Company-Models 24.

Tests: accessibleStatusCountsFor zaehlt Autor+Firma je einmal (UNION-Dedup)
und wendet Zusatz-Constraints auf beide Zweige an.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 13:55:13 +00:00
..
create.blade.php Optimierung 2.8: <x-portal.pr-presubmit-check> Blade-Component 2026-06-19 10:16:21 +00:00
edit.blade.php Optimierung 2.8: <x-portal.pr-presubmit-check> Blade-Component 2026-06-19 10:16:21 +00:00
index.blade.php Perf: Status-Counts der PM-Uebersicht via UNION statt OR-GROUP-BY 2026-06-30 13:55:13 +00:00
show.blade.php Optimierung 5.3 (Teil 1): Contact::displayName() 2026-06-19 13:15:38 +00:00