Как оптимизировать запрос MySQL? - PullRequest
0 голосов
/ 15 октября 2018

Следующий запрос займет 16 секунд, чтобы получить результат.

SELECT t.descr appSystem, t.writetime dateTime, ROUND(avg(t.cpu_avg_1),2) num FROM(
    select 
    res.res_descr DESCR,
    T9.WRITETIME,  
    ifnull(ROUND((CASE WHEN T9.kpi_no = 100000041 OR T9.kpi_no = 120000093 THEN T9.value END), 2), 0)  cpu_avg_1
    FROM res_object res left join (
    SELECT res.res_id, p.value, p.kpi_no, p.WRITETIME ,p.kbp FROM  res_object res
    LEFT JOIN pm_raw_p_reshost p ON p.kbp = res.res_id AND (p.kpi_no = 100000041 OR p.kpi_no = 120000093)
    AND res.classname='ResHost' ORDER BY p.value DESC) t9 on T9.res_id=res.res_id,
    res_node node,
    res_dim_os OS 
    WHERE node.res_id=res.res_id
    AND os.os_id=node.os_id
    AND (OS.DESCR = 'Linux' OR OS.DESCR = 'Windows')
) t WHERE t.writetime / 1000 < UNIX_TIMESTAMP(now()) 
AND t.writetime/1000 > UNIX_TIMESTAMP(DATE_SUB(now(),INTERVAL 1 day)) 
GROUP BY t.descr
ORDER BY avg(t.cpu_avg_1) DESC
LIMIT 0,15;

В таблице pm_raw_p_reshost p содержится 13752721 часть данных, и я получу 1351461 из них, используя условие t.writetime / 1000 < UNIX_TIMESTAMP(now()) AND t.writetime/1000 > UNIX_TIMESTAMP(DATE_SUB(now(),INTERVAL 1 day)).

Мне нужно только рассмотреть таблицу pm_raw_p_reshost, время, которое заняли другие таблицы, можно игнорировать.

Быстрее всего я могу сделать 16 секунд.

Как я могу потратить как можно меньше времени на получение нужных мне данных?

Любой ответ будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...