From 071cb9af2b0d419e45bcee2e1de4d581765fba83 Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Thu, 28 Mar 2024 19:17:37 +0100 Subject: [PATCH] Improve tags stats performance by using the new short_url_visits_counts table --- .../ShortUrl/Repository/ShortUrlListRepository.php | 2 +- module/Core/src/Tag/Repository/TagRepository.php | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/module/Core/src/ShortUrl/Repository/ShortUrlListRepository.php b/module/Core/src/ShortUrl/Repository/ShortUrlListRepository.php index 790a3dbb..323ecb10 100644 --- a/module/Core/src/ShortUrl/Repository/ShortUrlListRepository.php +++ b/module/Core/src/ShortUrl/Repository/ShortUrlListRepository.php @@ -85,7 +85,7 @@ class ShortUrlListRepository extends EntitySpecificationRepository implements Sh { $qb = $this->getEntityManager()->createQueryBuilder(); $qb->from(ShortUrl::class, 's') - ->where('1=1'); + ->where('1=1'); $dateRange = $filtering->dateRange; if ($dateRange?->startDate !== null) { diff --git a/module/Core/src/Tag/Repository/TagRepository.php b/module/Core/src/Tag/Repository/TagRepository.php index 0f113776..c63d461d 100644 --- a/module/Core/src/Tag/Repository/TagRepository.php +++ b/module/Core/src/Tag/Repository/TagRepository.php @@ -76,19 +76,19 @@ class TagRepository extends EntitySpecificationRepository implements TagReposito $buildVisitsSubQb = static function (bool $excludeBots, string $aggregateAlias) use ($conn) { $visitsSubQb = $conn->createQueryBuilder(); - $commonJoinCondition = $visitsSubQb->expr()->eq('v.short_url_id', 's.id'); + $commonJoinCondition = $visitsSubQb->expr()->eq('sc.short_url_id', 'st.short_url_id'); $visitsJoin = ! $excludeBots ? $commonJoinCondition : $visitsSubQb->expr()->and( $commonJoinCondition, - $visitsSubQb->expr()->eq('v.potential_bot', $conn->quote('0')), + $visitsSubQb->expr()->eq('sc.potential_bot', $conn->quote('0')), )->__toString(); return $visitsSubQb - ->select('st.tag_id AS tag_id', 'COUNT(DISTINCT v.id) AS ' . $aggregateAlias) - ->from('visits', 'v') - ->join('v', 'short_urls', 's', $visitsJoin) - ->join('s', 'short_urls_in_tags', 'st', $visitsSubQb->expr()->eq('st.short_url_id', 's.id')) + ->select('st.tag_id AS tag_id', 'SUM(sc.count) AS ' . $aggregateAlias) + ->from('short_url_visits_counts', 'sc') + ->join('sc', 'short_urls_in_tags', 'st', $visitsJoin) + ->join('sc', 'short_urls', 's', $visitsSubQb->expr()->eq('sc.short_url_id', 's.id')) ->groupBy('st.tag_id'); }; $allVisitsSubQb = $buildVisitsSubQb(false, 'visits');