我有以下查询,它需要很长时间才能运行,我想知道是否有更有效的编码方式。我有两个表DEVICE_LASTUPDATE和DEVICE_EVENTS。
DEVICE_LASTUPDATE表有大约14条记录,如下所示:
DEVICE_ID LAST_UPDATE
device1 2014-06-01 08:25:23
device2 2014-06-01 09:01:45
device3 2014-06-01 07:43:06
device4 2014-06-01 11:13:14
...etc
DEVICE_EVENTS表有超过一百万条记录,如下所示:
DEVICE_ID CREATED_DATE EVENT_CODE
device1 2014-06-01 08:25:23 1011
device1 2014-06-01 09:01:45 2025
device3 2014-06-01 07:43:06 1015
device2 2014-06-01 15:13:09 2115
device1 2014-06-01 11:20:19 1551
...etc
我想要的是DEVICE_LASTUPDATE中的每个DEVICE_ID找到DEVICE_LASTUPDATE.LAST_UPDATE = DEVICE_EVENTS.CREATED_DATE并返回那些DEVICE_ID的EVENT_CODE
以下SQL是我运行的,它可以工作,但速度很慢(平均5.5秒):
SELECT * FROM (SELECT * FROM DEVICE_LASTUPDATE) AS lastupdate
JOIN DEVICE_EVENTS
WHERE DEVICE_EVENTS.CREATED_DATE = lastupdate.LAST_UPDATE
AND DEVICE_EVENTS.DEVICE_ID = lastupdate.DEVICE_ID
答案 0 :(得分:4)
SELECT LU.DEVICE_ID, E.EVENT_CODE
FROM DEVICE_LASTUPDATE LU
JOIN DEVICE_EVENTS E
ON (LU.DEVICE_ID = E.DEVICE_ID AND LU.LAST_UPDATE = E.CREATED_DATE);
另外,请考虑在LU.DEVICE_ID, LU.LAST_UPDATE
和E.DEVICE_ID, E.CREATED_DATE
添加索引。