前几天一段代码出现了性能问题,其实数据量不是很大,如果运行在server端估计不会暴露性能问题,但是在终端上运行就比较慢
比如表A,有一个外键关联到表B。原来不好的做法,是先查询出表A中的N条记录,然后再遍历N条记录,从B表中查询,类似:
select * form tb_a;
select * from tb_b where b.id = ?;
这样如果A表中查询出N条记录,就需要执行N+1条SQL,可以利用连接查询合并成1条SQL
如果A的外键必不为空,可以使用内连接:
select a.*, b.* from tb_a a, tb_b b where a.bId = b.id;
这样就可以在一句SQL中把2个表的记录查出来。但是如果A的外键可能为空,就不能用上面这个语句,否则外键为空的记录就查不出来,需要使用外连接:
select a.*, b.* from tb_a a left join tb_b b on a.bId = b.id;
上面这个SQL语句,即使外键为空,也可以查出A表中的记录