使用MAX(id)优化查询

时间:2017-02-08 16:19:54

标签: mysql sql performance max

我有这个查询,根据日期向我显示id的{​​{1}}。

我的查询是:

id_units

查询返回的记录超过2000条,我认为有一种方法可以解决这个问题。

我正试图像这样表达我的查询:

SELECT max(swg.id) AS id
 FROM swg
 WHERE swg.status != 0
 AND sg.dateswg <= TIMESTAMPADD(DAY,(6-WEEKDAY('2015-12-28')),'2015-12-28')
 GROUP BY swg.id_units
ORDER BY swg.id;

这是有效的,但我想知道是否有另一种改进方法

方面!

2 个答案:

答案 0 :(得分:0)

这是您的查询:

SELECT max(swg.id) AS id
FROM swg
WHERE swg.status <> 0 AND
      swg.dateswg <= TIMESTAMPADD(DAY, 6 - WEEKDAY('2015-12-28'), '2015-12-28')
GROUP BY swg.id_units
ORDER BY MAX(swg.id);

优化很棘手,因为索引不能用于这两种情况。您可以从查询中使用的所有四列开始使用复合索引:swg(dateswg, status, id_units, id)

答案 1 :(得分:0)

status只有01,然后更改为status = 1,以便优化程序有一个地方可以查看,而不是两个不相交的地方。

INDEX(status, dateswg, id_units, id) -- in this order.

这对WHERE来说非常好,并且会“覆盖”。

不幸的是,GROUP BYORDER BY都需要排序;后者将是2000行,可能在RAM中完成;我无法分辨前者。