Project

General

Profile

Actions

Feature #42574

closed

Optimize autocomplete issue listing triggered by typing "##" by eager loading trackers

Added by Go MAEDA 7 days ago. Updated 3 days ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
Performance
Target version:
Start date:
Due date:
% Done:

0%

Estimated time:
Resolution:
Fixed

Description

When using the autocomplete feature to list issues by typing "##", an N+1 query occurs for loading associated trackers. Each issue's tracker is queried individually.

The attached patch fixes the problem by eager-loading the tracker association.

Before:

  Issue Load (1.2ms)  SELECT `issues`.* FROM `issues` INNER JOIN `projects` ON `projects`.`id` = `issues`.`project_id` WHERE `issues`.`project_id` = 1 AND (projects.status <> 9 AND projects.status <> 10 AND EXISTS (SELECT 1 AS one FROM enabled_modules em WHERE em.project_id = projects.id AND em.name='issue_tracking')) AND (issues.subject LIKE '%c%') ORDER BY `issues`.`id` DESC LIMIT 10
  ↳ app/controllers/auto_completes_controller.rb:36:in 'AutoCompletesController#issues'
  Tracker Load (0.4ms)  SELECT `trackers`.* FROM `trackers` WHERE `trackers`.`id` = 1 LIMIT 1
  ↳ app/controllers/auto_completes_controller.rb:77:in 'block in AutoCompletesController#format_issues_json'
  CACHE Tracker Load (0.0ms)  SELECT `trackers`.* FROM `trackers` WHERE `trackers`.`id` = 1 LIMIT 1
  ↳ app/controllers/auto_completes_controller.rb:77:in 'block in AutoCompletesController#format_issues_json'
  CACHE Tracker Load (0.0ms)  SELECT `trackers`.* FROM `trackers` WHERE `trackers`.`id` = 1 LIMIT 1
  ↳ app/controllers/auto_completes_controller.rb:77:in 'block in AutoCompletesController#format_issues_json'
  CACHE Tracker Load (0.0ms)  SELECT `trackers`.* FROM `trackers` WHERE `trackers`.`id` = 1 LIMIT 1
  ↳ app/controllers/auto_completes_controller.rb:77:in 'block in AutoCompletesController#format_issues_json'
  Tracker Load (0.5ms)  SELECT `trackers`.* FROM `trackers` WHERE `trackers`.`id` = 2 LIMIT 1
  ↳ app/controllers/auto_completes_controller.rb:77:in 'block in AutoCompletesController#format_issues_json'
  CACHE Tracker Load (0.0ms)  SELECT `trackers`.* FROM `trackers` WHERE `trackers`.`id` = 1 LIMIT 1
  ↳ app/controllers/auto_completes_controller.rb:77:in 'block in AutoCompletesController#format_issues_json'

After:

  Issue Load (1.2ms)  SELECT `issues`.* FROM `issues` INNER JOIN `projects` ON `projects`.`id` = `issues`.`project_id` WHERE `issues`.`project_id` = 1 AND (projects.status <> 9 AND projects.status <> 10 AND EXISTS (SELECT 1 AS one FROM enabled_modules em WHERE em.project_id = projects.id AND em.name='issue_tracking')) ORDER BY `issues`.`id` DESC LIMIT 10
  ↳ app/controllers/auto_completes_controller.rb:39:in 'AutoCompletesController#issues'
  Tracker Load (0.6ms)  SELECT `trackers`.* FROM `trackers` WHERE `trackers`.`id` IN (1, 2)


Files

Actions #1

Updated by Go MAEDA 6 days ago

  • Tracker changed from Defect to Feature
  • Subject changed from N+1 query when listing issues in autocomplete to Optimize autocomplete issue listing triggered by typing "##" by eager loading trackers
Actions #2

Updated by Marius BĂLTEANU 5 days ago

  • Target version changed from Candidate for next minor release to 5.1.8
Actions #3

Updated by Go MAEDA 3 days ago

  • Status changed from New to Resolved
  • Assignee set to Go MAEDA
  • Resolution set to Fixed

Committed the patch in r23660.

Actions #4

Updated by Go MAEDA 3 days ago

  • Status changed from Resolved to Closed

Merged the change into the stable branches in r23661 and r23662.

Actions

Also available in: Atom PDF