我需要改进我的查询,特别是执行时间。这是我的查询:
SELECT SQL_CALC_FOUND_ROWS p.*,v.type,v.idName,v.name as etapaName,m.name AS manager,
c.name AS CLIENT,
(SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(duration)))
FROM activities a
WHERE a.projectid = p.projectid) AS worked,
(SELECT SUM(TIME_TO_SEC(duration))
FROM activities a
WHERE a.projectid = p.projectid) AS worked_seconds,
(SELECT SUM(TIME_TO_SEC(remain_time))
FROM tasks t
WHERE t.projectid = p.projectid) AS remain_time
FROM projects p
INNER JOIN users m
ON p.managerid = m.userid
INNER JOIN clients c
ON p.clientid = c.clientid
INNER JOIN `values` v
ON p.etapa = v.id
WHERE 1 = 1
ORDER BY idName
ASC
这个的执行时间大约是。 5秒。如果我删除这部分:(SELECT SUM(TIME_TO_SEC(remain_time)) FROMtasks t WHERE t.projectid = p.projectid) AS keep_time
执行时间缩短至 0.3 秒。有没有办法获取 remain_time 的值以减少 exec.time ?
从 PHP 调用 SQL(如果这与任何建议的解决方案相关)。
最佳答案
听起来您需要一个关于任务
的索引。
尝试添加这个:
create index idx_tasks_projectid_remaintime on tasks(projectid, remain_time);
相关子查询应该只使用索引并且速度更快。
关于sql - 如何优化 MySQL 中的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24780544/