我使用的是Toad的SQL优化器,它在我的连接语句中添加了以下内容。
而不是说
emp.emplid = dept.emplid
它建议
emp.emplid = dept.emplid + 0
'+ 0'有什么作用?我在网上搜索过去的一小时,我找不到任何东西。我知道(+)的意思,但我从未见过这样的事情。
答案 0 :(得分:7)
+ 0
做了它的样子。它将0添加到dept.emplid
。但从性能的角度来看,这确实有所作为。通过将其转换为表达式,Oracle无法在dept.emplid
上使用任何索引。
因此,如果Oracle在dept.emplid
上选择索引,但您希望它使用不同的索引/计划,那么添加+ 0
是一种影响优化器的方法,因为不再匹配在那个特定的专栏上。任何表达都可以做到这一点。
另一种方法是进入优化提示。虽然这对于大型查询来说可能有点痛苦。
答案 1 :(得分:1)
'+ 0'的作用是向优化器指示它应该使用另一个索引。换句话说,我非常确定这两个字段中的一个(mp.emplid = dept.emplid)除了外键之外还有另一个索引特定字段。同样,+ 0取消默认优化器(外键)所采用的索引,并告诉它选择另一个索引。