跨库嵌套子查询和关联子查询

本文介绍了嵌套子查询和关联子查询的区别与应用场景。嵌套子查询先执行内部查询,再执行外部查询,适合内部查询结果集小的情况。关联子查询则将外部查询的每条记录传递给内部查询,适用于外部查询记录少的情况。对于'in'和'exists'的使用,根据数据表大小选择合适的方式。在跨库查询中,根据数据量和需求,可以灵活选择嵌套查询或关联查询,并考虑在应用端处理以优化性能。

嵌套子查询和关联子查询

嵌套子查询: 1. 内部查询只处理一次; 2. 与null比较,总得到null 3.先进行内部查询,然后再进行外部查询

关联子查询: 1. 外部查询得到的每天记录传入到内部查询; 2.内部查询基于外部查询传入的值; 3.内部查询从其结果中把值传回到外部查询,外部查询使用这些值来完成其处理。

  外部查询返回较少记录时,关联子查询比嵌套子查询效果高;

  内部查询返回较少记录时,嵌套子查询比关联子查询效果高.

 

in和exists

select * from A where cc in (select cc from B)

  如果表A较大,那么in比exists的效率要高(可以用到B表上cc列的索引).

select * from A where exists (select cc from B where cc=A.cc)

  如果表A较小,那么exists比in的效率要高(可以用到A表上cc列的索引)


not in 和not exists

如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;
  而not extsts 的子查询依然能用到表上的索引。

  所以无论那个表大,用not exists都比not in要快。


======================================

select b.*,
       (select c.name from user_info c where c.id = b.owneruser)  na,
       (select c.name from user_info c where c.id = b.createuser)  name2,
       (select c.name from user_info c where c.id = b.updateuser)  name
  from item_info b;

  from item_info b,
       user_info c,
       user_info d,
       user_info e
where b.owneruser = c.id
   and b.createuser = d.id
   and b.updateuser = e.id

跨库关联查询和跨库嵌套查询,跟据数据量和实际情况,可以相互替换,可能性能比较底

join换成in的也比较多,in的结果太多,导致传输sql太大,也可以在应用端join,这样连接次数比较多,foreach做法。

这时客户充当聚合或二次处理。


特别里的跨库是跨机等同,跨机嵌套子查询 关联子查询

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值