aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Wallabag/CoreBundle/Repository/EntryRepository.php
diff options
context:
space:
mode:
authorJeremy Benoist <jeremy.benoist@gmail.com>2019-06-05 10:51:06 +0200
committerJeremy Benoist <jeremy.benoist@gmail.com>2019-06-05 10:53:15 +0200
commit70df4c335965a9562cc24d3ccea0a6ed1a23b7b1 (patch)
treea0c398645e5d340940cf25fab9cab46eb7903e86 /src/Wallabag/CoreBundle/Repository/EntryRepository.php
parentf3bfb875e94021a93e24a41fbc0f8d86d4dee378 (diff)
downloadwallabag-70df4c335965a9562cc24d3ccea0a6ed1a23b7b1.tar.gz
wallabag-70df4c335965a9562cc24d3ccea0a6ed1a23b7b1.tar.zst
wallabag-70df4c335965a9562cc24d3ccea0a6ed1a23b7b1.zip
Use two indexes instead of one for hashed urls
When using `OR` in a where clause, a composite index can't be used. We should use a `UNION` to take advantages of it. Instead, create 2 indexes on each hashed urls and make 2 queries to find an url. It'll be faster than the previous solution.
Diffstat (limited to 'src/Wallabag/CoreBundle/Repository/EntryRepository.php')
-rw-r--r--src/Wallabag/CoreBundle/Repository/EntryRepository.php13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/Wallabag/CoreBundle/Repository/EntryRepository.php b/src/Wallabag/CoreBundle/Repository/EntryRepository.php
index 8b29aad2..7772e0b7 100644
--- a/src/Wallabag/CoreBundle/Repository/EntryRepository.php
+++ b/src/Wallabag/CoreBundle/Repository/EntryRepository.php
@@ -366,9 +366,20 @@ class EntryRepository extends EntityRepository
366 */ 366 */
367 public function findByHashedUrlAndUserId($hashedUrl, $userId) 367 public function findByHashedUrlAndUserId($hashedUrl, $userId)
368 { 368 {
369 // try first using hashed_url (to use the database index)
369 $res = $this->createQueryBuilder('e') 370 $res = $this->createQueryBuilder('e')
370 ->where('e.hashedUrl = :hashed_url')->setParameter('hashed_url', $hashedUrl) 371 ->where('e.hashedUrl = :hashed_url')->setParameter('hashed_url', $hashedUrl)
371 ->orWhere('e.hashedGivenUrl = :hashed_given_url')->setParameter('hashed_given_url', $hashedUrl) 372 ->andWhere('e.user = :user_id')->setParameter('user_id', $userId)
373 ->getQuery()
374 ->getResult();
375
376 if (\count($res)) {
377 return current($res);
378 }
379
380 // then try using hashed_given_url (to use the database index)
381 $res = $this->createQueryBuilder('e')
382 ->where('e.hashedGivenUrl = :hashed_given_url')->setParameter('hashed_given_url', $hashedUrl)
372 ->andWhere('e.user = :user_id')->setParameter('user_id', $userId) 383 ->andWhere('e.user = :user_id')->setParameter('user_id', $userId)
373 ->getQuery() 384 ->getQuery()
374 ->getResult(); 385 ->getResult();