用于连接的Oracle SQL“+ 0”语法?

时间:2011-08-16 00:37:01

标签: sql oracle join

我使用的是Toad的SQL优化器,它在我的连接语句中添加了以下内容。

而不是说

emp.emplid = dept.emplid

它建议

emp.emplid = dept.emplid + 0

'+ 0'有什么作用?我在网上搜索过去的一小时,我找不到任何东西。我知道(+)的意思,但我从未见过这样的事情。

2 个答案:

答案 0 :(得分:7)

+ 0做了它的样子。它将0添加到dept.emplid。但从性能的角度来看,这确实有所作为。通过将其转换为表达式,Oracle无法在dept.emplid上使用任何索引。

因此,如果Oracle在dept.emplid上选择索引,但您希望它使用不同的索引/计划,那么添加+ 0是一种影响优化器的方法,因为不再匹配在那个特定的专栏上。任何表达都可以做到这一点。

另一种方法是进入优化提示。虽然这对于大型查询来说可能有点痛苦。

答案 1 :(得分:1)

'+ 0'的作用是向优化器指示它应该使用另一个索引。换句话说,我非常确定这两个字段中的一个(mp.emplid = dept.emplid)除了外键之外还有另一个索引特定字段。同样,+ 0取消默认优化器(外键)所采用的索引,并告诉它选择另一个索引。