In cases where issue tracking and file modules are not enabled, this is also not needed:

(0.7ms) SELECT COUNT(DISTINCT `issues`.`id`) AS count_id, tracker_id AS tracker_id FROM `issues` LEFT OUTER JOIN `projects` ON `projects`.`id` = `issues`.`project_id` LEFT OUTER JOIN `issue_statuses` ON `issue_statuses`.`id` = `issues`.`status_id` LEFT OUTER JOIN `trackers` ON `trackers`.`id` = `issues`.`tracker_id` WHERE (projects.status=1 AND projects.id IN ( SELECT em.project_id FROM enabled_modules em WHERE em.name='issue_tracking')) AND ((projects.id = 1 OR (projects.lft > 1 AND projects.rgt < 2))) GROUP BY tracker_id

The reason is in allowed_node? in Redmine::MenuManager::MenuHelper. It first checks extra conditions, then checks if the user is allowed to perform an action. The user permission check in turn checks if a module is enabled. The patch changes the order in which the checks are executed: First the permissions, then the extra conditions. A win of 1.5-3ms per call on my system.