oracle的CBO优化器主要是根据什么来选择表的连接方式的?
我知道oracle的CBO优化器有三种表的连接方式 ,sort merge join , nested loops , hash join ,但我不知道oracle主要是跟据什么来觉定表的连接方式
比如说有的sql语句表连接是用的sort merge join,但是在网上不是说sort merge join比较慢吗,那为什么还要用sort merge join的方式来连接? 我还看到说用sort merge join连接主要是因为表的索引不够,请问是这样的吗? 小弟先谢过了
------解决方案--------------------
每种计划方式都会根据oracle内部指定的规则计算cost的成本,最后选择cost成本低的。
但是cost的计算并不一定全是正确的,存在出错的可能。所以有时需要我们去干预。
------解决方案--------------------同LS的。
这个是根据表、索引的统计信息来确定连接方式的。具体的确定过程,以及怎样确定最后选哪种连接方式,最后我也想知道。
要根据具体情况,sort merge join也不一定就最差吧。
“在缺乏数据的选择性或者可用的索引时,或者两个源表都过于庞大(所选的数据超过表记录数的5%)时,排序合并连接将比嵌套循环连更加高效。”
------解决方案--------------------一般来用NS LOOP的比较多点,HASH对小表会有优势