我有这个查询,根据日期向我显示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;
这是有效的,但我想知道是否有另一种改进方法
方面!
答案 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
只有0
或1
,然后更改为status = 1
,以便优化程序有一个地方可以查看,而不是两个不相交的地方。
INDEX(status, dateswg, id_units, id) -- in this order.
这对WHERE
来说非常好,并且会“覆盖”。
不幸的是,GROUP BY
和ORDER BY
都需要排序;后者将是2000行,可能在RAM中完成;我无法分辨前者。