sql优化相关:表关联的优化,字段筛选的优化。

在编写select语句的时候,总是会碰到下面这两个问题,就是有两种写法均可以达到一个相同的目的,但是却不知道到底哪种的sql语句的执行效率更高一些。下面展示这两个问题:
问题一:表关联时,直接表关联和做表后表关联,哪个执行效率高?
1.直接使用两个表关联,再选出需要的字段。

select a.deptno, a.dname, b.ename
  from dept a, emp b
 where a.deptno=b.deptno;

2.先挑选出两个表中关联字段、需要字段,from子查询造表后再进行关联。

select a.deptno, a.dname, b.ename
  from (select deptno, dname from dept) a,
  	   (select deptno, ename from emp) b
 where a.deptno=b.deptno;

问题二:筛选字段时,in字句和利用表关联筛选,哪个执行效率高?
1.使用in字句,字句中包含需要的字段。

select sal
  from emp
 where ename in (select ename 
 				   from emp
 				  where deptno=10);

2.利用from子查询选出需要的字段,利用表关联筛选字段。

select sal
  from emp a,(select ename 
			    from emp
			   where deptno=10) b
 where a.ename=b.ename;

为了解决这一困惑,需要一个数据量很大的库做测试。在此要感谢董老师的帮助。
测试结果:
问题一:
在这里插入图片描述
可以看到,先选出需要的字段再进行表关联的速度会快一些。在这里我理解为,因为提前的将无关的字段排除了,所以在关联的时候会省去拼接这些无关字段的时间。
问题二:
在这里插入图片描述
可以看到利用表关联去筛选数据的做法很慢,因为已经56秒了还没执行完毕,虽然子查询的数据是完全一致的,但是in字句明显要比表关联筛选要快的多,至于其中的原理,暂时还不理解 ,以后在学原理的时候希望可以了解到其中的原由。
总结:
1.在涉及到表关联时,最好将关联字段,需要的字段。做from子查询处理之后再进行表关联,会提高执行效率。
2.在涉及条件筛选某一字段时,where【筛选字段】in…字句,要比利用from 字句然后利用表关联筛选字段的方式效率高。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值