MySQL запрос выполняется медленно, что является узким местом - PullRequest
0 голосов
/ 23 января 2020

У меня есть запрос MySQL, который выполнялся в течение 22 секунд, я добавил индекс для всех условий выбора и где. таблица использования имеет около 79000 записей. Таблица меток содержит 602173 записей. Я попытался оптимизировать его, добавив индекс. Это операторы соединения, которые делают его медленным. Или любой индекс, который я должен реализовать, чтобы увеличить скорость хранимой процедуры. Но это все еще работает медленно. Могу ли я узнать, где находится узкое место и как я могу его исправить?

CREATE  PROCEDURE `SelectUsage2`(          
      IN p_ids MEDIUMTEXT
    , IN p_locationIDs MEDIUMTEXT
    , IN p_indicatorIDs MEDIUMTEXT        
    )
BEGIN
    select 
        , case when (select count(lbl.id) from `labels` as lbl where lbl.ObjectID = i.id and lbl.ObjectName = 'indicators' and lbl.ColumnName = 'IndicatorName' and lbl.LanguageCode = p_language) > 0 then
            (select content from `labels` as lbl where lbl.ObjectID = i.id and lbl.ObjectName = 'indicators' and lbl.ColumnName = 'IndicatorName' and lbl.LanguageCode = p_language limit 1)
        else
            i.IndicatorName
        end as IndicatorName
        u.*          
    from
        `usage` as u
        left join `locations` as l on u.LocationID = l.id
        left join `Indicators` as i on u.IndicatorID = i.id
        left join `Indicators` as i2 on i.ParentID = i2.id
    where           
        and (p_ids is null or FIND_IN_SET(u.id, p_ids))
        and (p_locationIDs is null or FIND_IN_SET(u.LocationID, p_locationIDs))
        and (p_indicatorIDs is null or FIND_IN_SET(u.IndicatorID, p_indicatorIDs))
    order by
        i.IndicatorName, l.LocationName
;    
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...