2015-04-20 5 views
0

Наше приложение Java работает очень медленно.MYSQL Slow Query

Это относится к различным причинам, одним из главных может быть то, что код 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

Какая СУБД? sqlserver - это не то же самое, что mysql. –

ответ

0

Какой стол uniqueId?

Чуть более читаемым:

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?