sql 左连接查询效率问题
--查询1:
select C.id,S1.* from (select * from A left join B on A.id=B.id)S1 left join C on S1.id=C.id
--查询2:
select * from A left join B on A.id=B.id left join C on A.id=C.id
--查询3:
select C.id,S1.* from (select * from A left join (select * from B where name = 1)B on A.id=B.id)S1 left join C on S1.id=C.id
--查询4:
select C.id,S1.* from (select * from A left join B on A.id=B.id and B.name=1)S1 left join C on S1.id=C.id
--查询5:
select * from A left join B on A.id=B.id left join C on A.id=C.id where B.name=1
(为方便使用了*,大家不必在意)
问题1:1和2 这两种查询方式哪种效率更高些?
问题2:3,4,5这种情况,当连接的右表需要做条件筛选的时候,在哪里加条件更好?
问题3:像查询1 ,外层取内层的字段的时候,使用S1.* 会不会依然会降低查询效率?
提前感谢各位的指教!
问题1:一般我倾向于简单的,就是查询2.至于哪个效率更高,不同的查询引擎会有不同。
问题2: 3,4,5三个查询,我还是倾向于简单的,就是5,不过你的5写错了,B.name=1 不能放到where上,要放到on上,否则A和B就是内联了
问题3:应该没有影响。
至于你最关心的效率,建议在你使用的的引擎上 explain 来看看