Skip to content

Commit 0e1761c

Browse files
committed
fix(issue): performance problem in sync issue query
Mysql uses temporary and filesort, with huge performance hit on big DB
1 parent 0a912eb commit 0e1761c

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

inc/issue.class.php

+14-8
Original file line numberDiff line numberDiff line change
@@ -212,14 +212,20 @@ public static function getSyncIssuesRequest() : AbstractQuery {
212212
'HAVING' => new QueryExpression("COUNT(`$itemTicketTable`.`items_id`) = 0")
213213
];
214214

215-
// assistance requests having only one generated ticket (use query2)
216-
$query3 = $query2;
217-
// replace LEFT JOIN with INNER JOIN to exclude tickets not linked to a Formanswer object
218-
$query3['INNER JOIN'][$itemTicketTable] = $query3['LEFT JOIN'][$itemTicketTable];
219-
unset($query3['LEFT JOIN'][$itemTicketTable]);
220-
// Only 1 relation to a Formanswer object
221-
$query3['GROUPBY'] = ["$itemTicketTable.items_id"];
222-
$query3['HAVING'] = new QueryExpression("COUNT(`$itemTicketTable`.`items_id`) = 1");
215+
// assistance requests having only one generated ticket (reuse query2)
216+
$query3 = [
217+
'SELECT' => $query2['SELECT'],
218+
'FROM' => $query2['FROM'],
219+
'INNER JOIN' => [$itemTicketTable => $query2['LEFT JOIN'][$itemTicketTable]],
220+
'LEFT JOIN' => [
221+
$query2['LEFT JOIN'][0], // This is the TABLE => [...] subquery
222+
$ticketValidationTable => $query2['LEFT JOIN'][$ticketValidationTable],
223+
],
224+
'WHERE' => $query2['WHERE'],
225+
'GROUPBY' => ["$itemTicketTable.items_id"],
226+
// Only 1 relation to a Formanswer object
227+
'HAVING' => new QueryExpression("COUNT(`$itemTicketTable`.`items_id`) = 1"),
228+
];
223229

224230
// Union of the 3 previous queries
225231
$union = new QueryUnion([

0 commit comments

Comments
 (0)