优化订单事件表的相关子查询



我有一个MariaDB表,其中包含订单事件:

TIMESTAMP'newstuff1''newstuff3'
EVENTID ORDERID 数据
1 1 "uff1"> 2021-12-17 11:48:00.000
2 12021-12-17 11:49:00.000
3 1 'newerstuff1' 2021-12-17 11:49:30.000
4 2 ‘stuff2’ 2021-12-17 11:50:0.000
5 3 'stuff3' 2021-12-17 11:51:10.000
6 32021-12-17 11:52:00.000
SELECT m3.*
FROM ( SELECT ORDERID, MAX(TIMESTAMP) AS TIMESTAMP
FROM MESSAGES m1
GROUP BY ORDERID ) m2
JOIN MESSAGES m3 USING(ORDERID, TIMESTAMP);

并具有

INDEX(ORDERID, TIMESTAMP)

该查询是一个";成组最大值";图案

派生表(子查询(将跳过索引,然后从表中查找其余列。

如果给定订单id有任何重复的时间戳,它将传递多行。如果不需要,请参阅this了解更多选项。

SELECT *
FROM table t1
WHERE NOT EXISTS ( SELECT NULL
FROM table t2
WHERE t1.orderid = t2.orderid
AND t1.`timestamp` < t2.`timestamp` )

也就是说,如果没有其他具有相同订单id和最近日期的行,只需选择该行。

PS。(orderid, `timestamp`)的指数会有所提高。

最新更新