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/

相关文章:

r - R优化中的梯度函数

sql-server - sql server 删除速度因索引而大幅减慢

mysql - 更新排序索引列以移动项目

python - Databricks 未在 SQL 查询中更新

php - 按季度而非按年报告

sql - postgresql group by 和 inner join

optimization - 我可以在 g++ 中控制寄存器分配吗?

haskell - 当存在一些递归情况时保持内联的潜力

php - 在 MySQL 和 php 中使用文本和整数以及应用内常量 "type"列之间的性能差异在哪里?

sql - 如何处理 Antlr 4 生成的 LISP 样式树?