Skip to content

Missing index for guest display name lookup #1182

@ChristophWurst

Description

@ChristophWurst

guests/lib/UserBackend.php

Lines 220 to 234 in ff10aed

$query->select('uid', 'displayname')
->from('guests_users', 'u')
->leftJoin('u', 'preferences', 'p', $query->expr()->andX(
$query->expr()->eq('userid', 'uid'),
$query->expr()->eq('appid', $query->expr()->literal('settings')),
$query->expr()->eq('configkey', $query->expr()->literal('email')))
)
// sqlite doesn't like re-using a single named parameter here
->where($query->expr()->iLike('uid', $query->createPositionalParameter('%' . $this->dbConn->escapeLikeParameter($search) . '%')))
->orWhere($query->expr()->iLike('displayname', $query->createPositionalParameter('%' . $this->dbConn->escapeLikeParameter($search) . '%')))
->orWhere($query->expr()->iLike('configvalue', $query->createPositionalParameter('%' . $this->dbConn->escapeLikeParameter($search) . '%')))
->orderBy($query->func()->lower('displayname'), 'ASC')
->orderBy('uid_lower', 'ASC')
->setMaxResults($limit)
->setFirstResult($offset);
does builds the query

SELECT
  `uid`,
  `displayname`
FROM
  `oc_guests_users` `u`
  LEFT JOIN `oc_preferences` `p` ON (`userid` = `uid`)
  AND (`appid` = ?)
  AND (`configkey` = ?)
WHERE
  (`uid` COLLATE `utf8mb4_general_ci` LIKE ?)
  OR (
    `displayname` COLLATE `utf8mb4_general_ci` LIKE ?
  )
  OR (
    `configvalue` COLLATE `utf8mb4_general_ci` LIKE ?
  )
ORDER BY
  `uid_lower` ASC
LIMIT
  ?

that does not use any index.

Query hash is d9703f573d96020de3765fcd7a85e628

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingperformancesPerformances issues and optimisations

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions