发布时间:2016-01-24 10:23:04
在ORACLE 11G大行其道的今天,还有很多人受早期版本的影响,记住一些既定的规则,
1.子查询结果集小,用IN
2.外表小,子查询表大,用EXISTS
这是完全错误的观点。在8i时代,这经常是正确的,但是现在已经11G了,马上12C就要面世了。其实在ORACLE 9i CBO就已经优化了IN,EXISTS的区别,ORACLE优化器有个查询转换器,很多SQL虽然写法不同,但是ORACLE优化器会根据既定规则进行查询重写,重写为优化器觉得效率最高的SQL,所以可能SQL写法不同,但是执行计划却是完全一样的。......【阅读全文】
发布时间:2016-01-24 10:20:58
TABLE函数在SQL中使用,可以将传入的集合转为普通表使用,与管道函数结合使用,往往能够提高效率,然后在实际应用过程中,发现CBO对TABLE函数的启发式基数估算,往往会导致性能问题。以下SQL虽然单条运行很快,但是运行非常频繁,严重消耗CPU资源。......【阅读全文】
发布时间:2016-01-23 21:22:16
因为优化器还不够强大,还有很多限制,或者因为一些逻辑原因,分析认为SQL要走正确的索引比较好,但是事实却无法正确利用索引。
?这时候,写的SQL必须除了统计信息之外,要能够给优化器足够多的其他需要的信息,让优化器能够选择更好的执行计划。......【阅读全文】
发布时间:2016-01-23 21:22:08
因为优化器还不够强大,还有很多限制,或者因为一些逻辑原因,分析认为SQL要走正确的索引比较好,但是事实却无法正确利用索引。
?这时候,写的SQL必须除了统计信息之外,要能够给优化器足够多的其他需要的信息,让优化器能够选择更好的执行计划。......【阅读全文】