mysql多表联合查询(left join)优化
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2018-06-24 11:50:38
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
有三个数据表,消息表message,联系人表contact,用户表user,
message表中有 username,contact_username,分别对应user.username,contact.username类型为varchar(50)并且已经建立啦索引
查消息列表的时候数据量少的时候可以直接用下面语句
select * from message left join user on message.username=user.username left join contact on message.contact_username=contact.username order by message_id desc limit 10
但是如果message表的数据到达百万千万级别的时候这种查询就显示得慢啦很多,虽然usename,contact_username都可以加索引,但是因为同时只能用一个索引所以message这个表会放弃索引转为值班表扫描,
优化方法为先从message中找出指定的记录并且创建一个临时表,然后用这个临时表和其它它联合查询其它信息,如下
select * from (select * from message order by message_id desc limit 10) tem_message left join user on tem_message.username=user.username left join contact on tem_message.contact_username=contact.contact_username