API: Add IGNORE INDEX to avoid bad plan in ApiQueryRevisions
authorBrad Jorsch <bjorsch@wikimedia.org>
Thu, 23 May 2019 16:58:19 +0000 (12:58 -0400)
committerBrad Jorsch <bjorsch@wikimedia.org>
Thu, 23 May 2019 18:22:39 +0000 (14:22 -0400)
None of the queries generated by ApiQueryRevisions should be using the
`rev_timestamp` index, but MariaDB is insisting on doing so for one
particular query anyway.

Bug: T224017
Change-Id: I9476532d5896d9ba901c4c7398890bfecb1a318d

includes/api/ApiQueryRevisions.php

index e60835b..ee6a264 100644 (file)
@@ -389,6 +389,10 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
 
                $this->addOption( 'LIMIT', $this->limit + 1 );
 
+               // T224017: `rev_timestamp` is never the correct index to use for this module, but
+               // MariaDB (10.1.37-39) sometimes insists on trying to use it anyway. Tell it not to.
+               $this->addOption( 'IGNORE INDEX', [ 'revision' => 'rev_timestamp' ] );
+
                $count = 0;
                $generated = [];
                $hookData = [];