mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
Merge pull request #29551 from nextcloud/revert-29322-mysql-search-ignore-index-21
This commit is contained in:
commit
a2ccd43c32
3 changed files with 4 additions and 40 deletions
|
|
@ -1301,21 +1301,4 @@ class QueryBuilder implements IQueryBuilder {
|
|||
|
||||
return $this->helper->quoteColumnName($alias);
|
||||
}
|
||||
|
||||
/**
|
||||
* Either appends to or replaces a single, generic query part.
|
||||
*
|
||||
* The available parts are: 'select', 'from', 'set', 'where',
|
||||
* 'groupBy', 'having' and 'orderBy'.
|
||||
*
|
||||
* @param string $sqlPartName
|
||||
* @param mixed $sqlPart
|
||||
* @param bool $append
|
||||
*
|
||||
* @return $this This QueryBuilder instance.
|
||||
*/
|
||||
public function add(string $sqlPartName, $sqlPart, bool $append = false) {
|
||||
$this->queryBuilder->add($sqlPartName, $sqlPart, $append);
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -848,13 +848,7 @@ class Cache implements ICache {
|
|||
protected function buildSearchQuery(ISearchQuery $searchQuery): IQueryBuilder {
|
||||
$builder = $this->getQueryBuilder();
|
||||
|
||||
// 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 = $builder->selectFileCache('file');
|
||||
|
||||
$query->whereStorageId();
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ declare(strict_types=1);
|
|||
|
||||
namespace OC\Files\Cache;
|
||||
|
||||
use Doctrine\DBAL\Platforms\MySQLPlatform;
|
||||
use OC\DB\QueryBuilder\QueryBuilder;
|
||||
use OC\SystemConfig;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
|
|
@ -46,24 +45,12 @@ class CacheQueryBuilder extends QueryBuilder {
|
|||
$this->cache = $cache;
|
||||
}
|
||||
|
||||
public function selectFileCache(string $alias = null, string $mysqlIndexHint = '') {
|
||||
public function selectFileCache(string $alias = null) {
|
||||
$name = $alias ? $alias : 'filecache';
|
||||
$this->select("$name.fileid", 'storage', 'path', 'path_hash', "$name.parent", 'name', 'mimetype', 'mimepart', 'size', 'mtime',
|
||||
'storage_mtime', 'encrypted', 'etag', 'permissions', 'checksum', 'metadata_etag', 'creation_time', 'upload_time')
|
||||
->from('filecache', $name);
|
||||
if ($mysqlIndexHint !== '' && $this->getConnection()->getDatabasePlatform() instanceof MySQLPlatform) {
|
||||
$this->add('join', [
|
||||
$this->quoteAlias($name) => [
|
||||
// horrible query builder crimes to sneak in raw sql after the "FROM oc_filecache $name"
|
||||
'joinType' => $mysqlIndexHint . ' left',
|
||||
'joinTable' => $this->getTableName('filecache_extended'),
|
||||
'joinAlias' => $this->quoteAlias('fe'),
|
||||
'joinCondition' => $this->expr()->eq("$name.fileid", 'fe.fileid'),
|
||||
],
|
||||
], true);
|
||||
} else {
|
||||
$this->leftJoin($name, 'filecache_extended', 'fe', $this->expr()->eq("$name.fileid", 'fe.fileid'));
|
||||
}
|
||||
->from('filecache', $name)
|
||||
->leftJoin($name, 'filecache_extended', 'fe', $this->expr()->eq("$name.fileid", 'fe.fileid'));
|
||||
|
||||
$this->alias = $name;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue