我在执行此代码时遇到问题:

SELECT * FROM tblpm n 
WHERE date_updated=(SELECT MAX(date_updated) 
FROM tblpm GROUP BY control_number 
HAVING control_number=n.control_number)

基本上,我想返回每个控制编号的最新日期.上面的查询返回正确的输出,但需要37秒.在显示输出之前.

有没有其他sql子句或命令可以比上面的查询执行得更快?

提前谢谢.

推荐答案

将子查询放入WHERE子句并将其限制为n.control_number意味着它会多次运行子查询.这被称为correlated subquery,它通常是性能杀手.

最好在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);

Mysql相关问答推荐

如何使RST(*)在巨大的数据集上快速执行?

S优化联接更新的最佳方式是什么?

客户跨订阅的跨时间线计数

SQL - Select 复合主键,条件为其中一个主键

如果WHERE语句包含所有列,唯一键顺序是否重要?

版本升级到5.0.0后在QueryDSL中使用Enum时出错

计算符合字段值只能包含一种事件类型这一事实的记录

如何查询一行

从表中 Select 具有不同顺序的列

Hibernate 不创建表'

替代对多个表执行 FULL OUTER JOIN?

如何使用等于、喜欢和不等于在 json 字段上编写查询?

MySql SELECT 查找包含数字的区间的时间复杂度是多少?

即使使用索引,MySQL 计数和按查询分组也很慢

如何创建一个判断行是否存在的mysql查询-如果存在我想插入一条新记录,否则增加一个值

巨大的未分区 MySQL 表问题

MySql - 默认情况下主键是唯一的吗?

如何使主键从 1000 开始?

仅在 MYSQL DATEDIFF 中显示小时数

如何在 python 中逐行获取 MySQL ResultSet