oracle中sql优化读书笔记1-优化器

我们写一条sql语句给Oracle,Oracle是需要将他解析之后才去执行的,也就是要明确先干啥后干啥。这就是所谓的执行计划。

优化器就是用来得出最后的执行计划的工具,Oracle的优化器有两种一种是基于规则的,一种是基于成本的。

1.基于规则的,就是明确了步骤,比如说必须是先把where 条件中最后一个条件用于过滤,再在此基础上用倒数第二个条件过滤。

2.基于成本的,就是先收集一下当前的数据量有多大,各种条件的数据量有多大(这就得有Oracle的统计的东西做支持了),通过判断找出来过滤出最少的数据作为下一次筛选的基础数据。

基于规则的就是Oracle做产品的时候已经对不同的查询分了优先级了,到时候肯定是按照优先级去执行的。 这时候可优化的空间就比较小了。

因为他的执行计划难以调整,比如 优化的时候对于dba可能经常用hint去影响执行计划去,基于规则的这里边就很少能用了。

在很难里边也总是能优化的吧。文章中列了两条

1.把原有的规则给废掉,例如有两个条件,不知道谁先谁后,两个都是索引键,把其中一个列中加入0值或空格导致索引失效,那么另一个自然就优先了。

2.依据缓存,先调入到内存中的会变旧,甲乙按先后进入,后用的乙,那么到时候执行就先用乙(说的同优先级,不同优先级那肯定还得按规矩来)