]> source.dussan.org Git - nextcloud-server.git/commitdiff
tell mysql to ignore the sort index for search queries 29322/head
authorRobin Appelman <robin@icewind.nl>
Mon, 18 Oct 2021 16:05:48 +0000 (18:05 +0200)
committerRobin Appelman <robin@icewind.nl>
Mon, 18 Oct 2021 16:05:48 +0000 (18:05 +0200)
mysql really likes to pick an index for sorting if it can't fully satisfy the where
filter with an index, since search queries pretty much never are fully filtered by index
mysql often picks an index for sorting instead of the *much* more useful index for filtering.

To bypass this, we tell mysql explicitly not to use the mtime (the default order field) index,
so it will instead pick an index that is actually useful.

Signed-off-by: Robin Appelman <robin@icewind.nl>
lib/private/Files/Cache/Cache.php

index ae707fb5b54cb5e68e39259ff5d02635e8a6d15b..99be91f5d6be91b2cd3887c133218a77ce57d92a 100644 (file)
@@ -840,7 +840,13 @@ class Cache implements ICache {
        protected function buildSearchQuery(ISearchQuery $searchQuery): IQueryBuilder {
                $builder = $this->getQueryBuilder();
 
-               $query = $builder->selectFileCache('file');
+               // mysql really likes to pick an index for sorting if it can't fully satisfy the where
+               // filter with an index, since search queries pretty much never are fully filtered by index
+               // mysql often picks an index for sorting instead of the *much* more useful index for filtering.
+               //
+               // To bypass this, we tell mysql explicitly not to use the mtime (the default order field) index,
+               // so it will instead pick an index that is actually useful.
+               $query = $builder->selectFileCache('file', 'ignore index for order by (fs_mtime)');
 
                $query->whereStorageId();