For now at least this will avoid a filesort for some cases. But it might
start misbehaving again when $wgActorTableSchemaMigrationStage is set to
WRITE_BOTH or WRITE_NEW.
Bug: T189026
Change-Id: Idd987181b17b824fdf1094f5c3b1c689b1792eb0
$queryInfo['conds'][] = $ipRangeConds;
} else {
// tables and joins are already handled by Revision::getQueryInfo()
$queryInfo['conds'][] = $ipRangeConds;
} else {
// tables and joins are already handled by Revision::getQueryInfo()
- $queryInfo['conds'][] = ActorMigration::newMigration()
- ->getWhere( $this->mDb, 'rev_user', $user )['conds'];
+ $conds = ActorMigration::newMigration()->getWhere( $this->mDb, 'rev_user', $user );
+ $queryInfo['conds'][] = $conds['conds'];
+ // Force the appropriate index to avoid bad query plans (T189026)
+ if ( count( $conds['orconds'] ) === 1 ) {
+ if ( isset( $conds['orconds']['actor'] ) ) {
+ // @todo: This will need changing when revision_comment_temp goes away
+ $queryInfo['options']['USE INDEX']['temp_rev_user'] = 'actor_timestamp';
+ } else {
+ $queryInfo['options']['USE INDEX']['revision'] =
+ isset( $conds['orconds']['userid'] ) ? 'user_timestamp' : 'usertext_timestamp';
+ }
+ }