有没有一种更有效的MySQL查询编码方式?

时间:2014-06-05 15:55:52

标签: mysql

我有以下查询,它需要很长时间才能运行,我想知道是否有更有效的编码方式。我有两个表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

1 个答案:

答案 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_UPDATEE.DEVICE_ID, E.CREATED_DATE添加索引。