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的时候,既可以采用基于成本的优化方法,也可以采用基于规则的优化方法。所以可以肯定的是我上面的例子采用的应该是基于成本的优化方法