我一直在努力优化我的查询,看起来像一个:MySQL的UNION VS IN子句
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子句中的“发件人”ID增加(> 50),查询速度变慢(约5-6秒)。
考虑到我的查询可能成为50个查询的联合,建议使用多个联合子句而不是IN子句。所以我的查询将如下所示:
(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)
EXPLAIN输出会很好。 – 2009-06-09 10:18:44