2015-04-20 173 views
0

我們的Java應用程序運行速度非常緩慢。MYSQL慢查詢

這種情況出於各種原因,其中一個主要原因可能是應用程序中的MySQL代碼使用兩個不同的表來獲取此數據,並進行連接。有人能夠建議如何將這個查詢寫得更好嗎?

SELECT DISTINCT uniqueId 
FROM advertisementmodule 
JOIN advertisement ON advertisementmodule.idAdvertisement = advertisement.idAdvertisement 
JOIN advertisementschedule ON advertisement.idAdvertisementSchedule = advertisementschedule.idAdvertisementSchedule 
JOIN adschedulegroup ON advertisementschedule.idAdScheduleGroup = adschedulegroup.idAdScheduleGroup 
WHERE adschedulegroup.publisherCode = 'ABC'; 

SELECT * 
FROM taurustour 
JOIN searchthemestaurus 
WHERE uniqueId IN (
     '18538' 
     ,'17142' 
     ,'11248' 
     ,'18458' 
     ) 
    AND air IS true; 
+0

對上述查詢顯示「explain select ...」。將結果分享到問題中。 –

+1

'主要原因之一可能' - 你確定嗎?引用唐納德克努特的話說,「不成熟的優化是一切罪惡的根源」。剖析代碼以確保您正在優化需要優化的內容。如果延遲落在查詢上 - 是您加入索引的列嗎? – copeg

+2

哪個DBMS? sqlserver與mysql不是一回事。 –

回答

0

哪個表是uniqueId in?

有點更具可讀性:

SELECT DISTINCT uniqueId 
    FROM advertisementmodule AS m 
    JOIN advertisement AS a 
      ON m.idAdvertisement = a.idAdvertisement 
    JOIN advertisementschedule AS s 
      ON a.idAdvertisementSchedule = s.idAdvertisementSchedule 
    JOIN adschedulegroup AS g 
      ON s.idAdScheduleGroup = g.idAdScheduleGroup 
    WHERE g.publisherCode = 'ABC'; 

你有publisherCode開始指數