2014-06-05 105 views
0

我有以下查詢,它需要很長時間才能運行,我想知道是否有更高效的編碼方式。我有兩個表DEVICE_LASTUPDATE和DEVICE_EVENTS。有沒有更有效的方法來編碼這個MySQL Query?

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是我ru nning和它的作品,但它是緩慢的(平均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

」全部選擇全選「...是的,這可能相當低效。 –

+2

我錯過了什麼'SELECT * FROM DEVICE_LASTUPDATE as lastupdate' ...什麼是額外的'SELECT'? – War10ck

回答

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添加索引。 「

+3

我很想看到實際的性能增益! – Brewal

+0

@Brewal我也是:-' –

相關問題