Oracle SQL中表连接顺序探究

本文探讨了SQL查询优化中一个常见误解:将记录数最小的记录写到FROM子句的最后以提高效率。通过实例验证,发现这种优化规则仅在基于规则的优化方法时有效,并解释了原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL语句优化中大多会写上这样一句,把记录数最小的记录写到From子句的最后以提高查询的效率,我开始也深信不疑,但是自己写语句验证的时候却得到相反的结果。

下面是我验证的结果:

 

SQL> set timing on
SQL> select  count(*) from all_objects,dept;
 
  COUNT(*)
----------
    136540
 
Executed in 3.219 seconds
 
SQL> select  count(*) from dept,all_objects
  2  ;
 
  COUNT(*)
----------
    136540
 
Executed in 1.531 seconds

这样的结果让我很疑惑,后来仔细查阅一些资料后得知,这一条优化规则仅在基于规则的优化方法时有效,然后查看了自己的oracle的优化选择。

choose是oracle的默认选项,采用choose的时候,既可以采用基于成本的优化方法,也可以采用基于规则的优化方法。所以可以肯定的是我上面的例子采用的应该是基于成本的优化方法






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值