关联查询语句: select * from a1,a2 where a1.id=a2.id and a1.temporary='N' and a2.status='NOVALID';两表在关联条件的字段上都有索引,又都有额外的过滤条件,优化器在选择走嵌套联接时,有两种可能,一种a1驱动a2,一种是a2驱动a1,哪种方式更好,取决于两表使用过滤条件过滤后哪个表返回的行数少,因为我们知道嵌套联接时,小表驱动大表效率高。而a1表的temporary字段,a2表的status字段数据分布不均匀,选择性差,不适合建立索引。这个时候直方图就有用武之地了。已知a1表的temporary='N'条件过滤性差,a2表的status='NOVALID'的过滤性好,用a2驱动a1效率会更高。因为没有直方图时,优化器不知道谁的过滤性好,按等值过滤的默认规则filtered=10进行过滤,在选择执行计划时就有可能做出错误决策。 我们先看没有收集直方图时的执行计划。如下图所示: