我有2张桌子。
第一张表是我的对象(~1,000行)。
Table Name: object
ID | name
1 | Dummy object 1
2 | Dummy object 2
3 | Dummy object 3
...
724 | Dummy object 724
...
etc.
第二个表用于对象事件(~200,000行)
Table Name: events
ID | ID_OBJ | ID_MES | description | timestamp
1 | 3 | 3071 | Test event | 2017-01-28 12:00:01
2 | 4 | 3001 | Doors opened | 2017-01-28 13:00:04
3 | 3 | 3002 | Doors closed | 2017-01-28 13:33:45
...
etc...
当我使用此查询时,从表中加载数据大约需要10秒钟:
SELECT
o.ID, o.name, e.timestamp AS last_event
FROM
object AS o
LEFT JOIN
events AS e
ON
e.ID_OBJ = o.ID
AND
(SELECT MAX(ID) FROM events WHERE events.ID_OBJ = o.ID AND ID_MES != 3071)
GROUP BY
o.ID
我需要获取我的对象列表,包括上次活动的时间戳,但我不需要包含ID_MES 3071的活动。
当我删除" AND ID_MES!= 3071"从我的查询,它的工作非常快。有人知道这个问题的解决方案来提高速度吗?
答案 0 :(得分:1)
这样可行:
SELECT o.ID, o.name, MAX(e.timestamp) AS last_event
FROM
object o
LEFT JOIN
events e
ON
e.ID_OBJ = o.ID AND e.ID_MES != 3071
GROUP BY
o.ID
它应该相当快。如果您还想选择最近事件的另一个字段,那么您需要查看最大n组/标记。