关于Mysqlleftjoin和⼦查询
背景:
今天在做⼀个项⽬的时候需要关联查询,但是好奇想知道left join 和⼦查询哪⼀个⽐较合适。
于是做了个实验。
⼦查询:
SELECT a.*,(select content from yxhy_news_content  where
yxhy_news_content.id=a.id) as content FROM `yxhy_news` `a` WHERE  `a`.`id` = '47'
多表left joinLIMIT 1
查询时间为0.735
LEFT JOIN查询
select * from yxhy_news a LEFT JOIN yxhy_news_content b on b.id=a.id where a.id=47;
查询时间为0.188S
很明显,LEFT JOIN 要⽐⼦查询效率⾼。其原因是⼦表的ID是没有添加索引的。
在yxhy_news_content这个⼦表添加主键索引后实验结果如下。
LEFT JOIN查询结果:
select * from yxhy_news a LEFT JOIN yxhy_news_content b on b.id=a.id where a.id=61
时间为:0.055s
⼦查询结果:
SELECT a.*,(select content from yxhy_news_content  where
yxhy_news_content.id=a.id) as content FROM `yxhy_news` `a` WHERE  `a`.`id` = 61
LIMIT 1
时间: 0.046s
很明显⼦查询效果要⽐LEFT JOIN效率要⾼,但是还是不建议在FROM之前使⽤⼦查询。即使是有主键的情况下也不要这么使⽤。100万数据表未建索引的情况下,连接会⽐⽤⼦查询快⼏倍,建索引后两种查询性能差不多。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。