mysql多表联合查询(left join)优化

来源:赵克立博客 分类: 数据库 标签:--发布时间:2018-06-24 11:18:01最后更新:2018-06-24 11:50:38浏览:5310
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。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



微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python