J-J*_*J-J 53 mysql sql optimization greatest-n-per-group
执行此代码时遇到问题:
SELECT * FROM tblpm n
WHERE date_updated=(SELECT MAX(date_updated)
FROM tblpm GROUP BY control_number
HAVING control_number=n.control_number)
Run Code Online (Sandbox Code Playgroud)
基本上,我想返回每个控制号的最新日期.上面的查询返回正确的输出,但需要37秒.在输出显示之前.
是否还有其他sql子句或命令可以比上面的查询执行得更快?
提前致谢.
Bil*_*win 117
将子查询放在WHERE子句中并将其限制为n.control_number意味着它多次运行子查询.这称为相关子查询,它通常是性能杀手.
最好在FROM子句中运行子查询一次,以获得每个控件号的最大日期.
SELECT n.*
FROM tblpm n
INNER JOIN (
SELECT control_number, MAX(date_updated) AS date_updated
FROM tblpm GROUP BY control_number
) AS max USING (control_number, date_updated);
Run Code Online (Sandbox Code Playgroud)
Mic*_*ahn 19
没有必要在子查询中分组...... where子句就足够了:
SELECT * FROM tblpm n
WHERE date_updated=(SELECT MAX(date_updated)
FROM tblpm WHERE control_number=n.control_number)
Run Code Online (Sandbox Code Playgroud)
另外,你有'date_updated'列的索引吗?那肯定会有所帮助.
| 归档时间: |
|
| 查看次数: |
124672 次 |
| 最近记录: |