У меня есть запрос 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