sql - 如何优化 MySQL 中的查询?

标签 sql optimization

我需要改进我的查询,特别是执行时间。这是我的查询:

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/

相关文章:

MySQL - 在多个列中选择多个值,其中所有匹配项都有一个结果

mysql - SQL "successful"但不更新数据库?

c++ - 指针递增 1 来遍历数组的元素是否更快?

wordpress - CloudFront CDN(无 GZip)与 Web 服务器/本地(适用于所有 CSS/JS)

mysql - SQL 优化最佳解释?

sql - 如何使用selectExpr在spark数据帧中转换结构数组?

mysql - SQL语句获取从现在起接下来两天的日期

mysql - SQL 更新标志,其中不同的值

linux - 需要帮助才能理解从 C 生成的汇编代码

algorithm - 在边界不重叠的闭合曲线内均匀分布点的快速算法