Mysql 如何使用5个子查询优化此查询?
我基本上是在尝试优化这个查询,以便在将它合并到我的基础Mysql 如何使用5个子查询优化此查询?,mysql,optimization,Mysql,Optimization,我基本上是在尝试优化这个查询,以便在将它合并到我的基础SELECT*FROM projectsquery之前,计算给定项目的任务小时数 其中1个子查询仅从任务表中进行选择,其中2个子查询从任务中进行选择,并在任务日志上进行内部联接,反之亦然,其中2个子查询彼此之间进行简单计算 有没有更有效的方法来优化这一点?我从未使用过临时表,但也许我可以先从tasks中选择具有给定项目id的所有任务,然后再从该临时表中进行后续选择?如有任何建议,我将不胜感激 如果需要,我可以使用sql FIDLE复制模式,但
SELECT*FROM projects
query之前,计算给定项目的任务小时数
其中1个子查询仅从任务
表中进行选择,其中2个子查询从任务
中进行选择,并在任务日志
上进行内部联接,反之亦然,其中2个子查询彼此之间进行简单计算
有没有更有效的方法来优化这一点?我从未使用过临时表,但也许我可以先从tasks
中选择具有给定项目id的所有任务,然后再从该临时表中进行后续选择?如有任何建议,我将不胜感激
如果需要,我可以使用sql FIDLE复制模式,但这需要一些时间。您可以多次从同一个表传递。如果没有任何执行计划,我会先尝试以下方法
SELECT
(SELECT COALESCE(SUM(t.hours), 0) AS allotted_hours
FROM tasks AS t
WHERE t.projects_id = 8
AND t.complete != 100
AND t.name LIKE '%Ongoing%'
AND t.name NOT LIKE '%Placeholder%') AS allotted_hours_notcomplete_ongoing,
(SELECT COALESCE(SUM(tl.hours), 0) AS hr
FROM tasks AS t
INNER JOIN tasklogs AS tl ON (tl.tasks_id = t.id)
WHERE t.projects_id = 8
AND t.complete != 100
AND t.name LIKE '%Ongoing%'
AND t.name NOT LIKE '%Placeholder%') AS logged_hours_notcomplete_ongoing,
(SELECT (allotted_hours_notcomplete_ongoing - logged_hours_notcomplete_ongoing) + logged_hours_notcomplete_ongoing) AS difference_notcomplete_ongoing,
(SELECT COALESCE(SUM(t.hours), 0) AS hr
FROM tasks AS t
WHERE t.projects_id = 8
AND t.complete != 100
AND t.name NOT LIKE '%Ongoing%'
AND t.name NOT LIKE 'Placeholder%') AS allotted_hours_notcomplete_regular,
(SELECT COALESCE(SUM(tl.hours), 0) AS hr
FROM tasklogs AS tl
INNER JOIN tasks AS t ON (t.id = tl.tasks_id
AND t.projects_id = 8
AND t.complete = 100)
WHERE hourtypes_id IN (1,
2)) AS logged_hours_complete,
(SELECT logged_hours_complete + allotted_hours_notcomplete_regular + difference_notcomplete_ongoing) AS total
我基本上只试过一次。之后,我将使用内部选择和where进行过滤。您当然需要以下索引
任务
任务日志
t.id
t.projects_id
t.complete
t.name
hourtypes_id
t.hours
我假设hourtypes\u id在tasks表中
t.id
t.projects_id
t.complete
t.name
hourtypes_id
t.hours
tl.tasks_id
tl.hours