Я пытался оптимизировать один из моих запросов, который выглядит следующим образом:
select toc.* from
(select sender, max(convid) as maxconvid
from MetaTable
where sender in ('arjunchow','aamir_alam')
group by sender) as tmp1
inner join MetaTable as toc on
toc.sender = tmp1.sender
and toc.convid = tmp1.maxconvid;
Когда сервер mysql находится в состоянии стресса, этот запрос обычно отвечает в течение 0,2 с, но когда количество идентификаторов «отправителя» в предложении IN увеличивается (> 50), запрос сильно замедляется (~ 5-6 с) ,
Желательно ли использовать несколько предложений объединения вместо предложения IN, учитывая, что мой запрос может стать объединением из 50 запросов. Так что мой запрос будет выглядеть так:
(SELECT
convId,
UNIX_TIMESTAMP(timeStamp) as timeStamp,
UNIX_TIMESTAMP(createTime) as createTime,
numMessages,
rootMsg,
sender,
ipormobile,
modIpOrMobile,
UNIX_TIMESTAMP(modTimeStamp) as modTimeStamp
from
MetaTable
where
sender='arjunchow'
ORDER BY convId DESC limit 1)
UNION ALL
(SELECT
convId,
UNIX_TIMESTAMP(timeStamp) as timeStamp,
UNIX_TIMESTAMP(createTime) as createTime,
numMessages,
rootMsg,
sender,
ipormobile,
modIpOrMobile,
UNIX_TIMESTAMP(modTimeStamp) as modTimeStamp
from
MetaTable
where
sender='aamir_alam'
ORDER BY convId DESC limit 1)