oracleleftjoin如何触发index

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracleleftjoin如何触发index相关的知识,希望对你有一定的参考价值。

在执行Oracle Left Join语句时,可以通过在Left Join后面添加 where子句来触发索引的使用,并改善查询性能。另外也可以在Left Join前面添加 hint来指定要使用的索引,从而帮助触发索引。使用Hint来指定索引的语法格式如下:
SELECT ...FROM table_name /* +INDEX (index_name) */ LEFT JOIN other_table_name ...WHERE . . . ;
其中,index_name表示要使用的索引名称,可以通过查看数据库表的索引列表来获取。另外,也可以使用where子句来触发索引,也就是说,将where字句写在left join之后,避免出现嵌套循环关联(Nested Loop Joins),从而触发索引查询。
参考技术A 在oracle数据库中,可以使用以下步骤触发left join索引:

(1) 为两个表创建相应的索引(或者使用已有的索引)。

(2) 尽量使用ANSI-92模式的SQL语法来编写left join语句,其实可以使用更新的ANSI标准模式语法(ANSI 99)来代替。

(3) 在JOIN表达式中,使用显式的ON 子句以显示的方式描述JOIN条件,而不是使用隐式的WHERE 子句。

(4) 在JOIN表达式中,将满足索引的条件包含在ON 子句中,而不是使用WHERE子句。

(5)当WHERE 子句中有多种连接条件时,尽可能使用索引(s)中的字段,而不是使用未索引的字段。

(6) 如果可以,尽量将条件置于ON 子句中,而不是将其置于WHERE 子句中。

(7) 改变ORacle 属性SETOPTIMIZER_GOAL 以不限制索引的使用(预设值为ALL_ROWS)。 要使其能够被索引,这将提高其被使用的概率。
参考技术B Oracle在使用Left Join查询时,仅当两表中至少有一张表上的列使用到索引后,才会试图触发index。因此,在使用left join查询时,应该尽量保证有一张表上的列上有相应的索引以帮助提高查询效率。 参考技术C Oracle默认使用索引优化LEFT JOIN,通常情况下,只要在进行LEFT JOIN时,适当地设置了索引并且某一列的值满足相等或类似条件,就可以自动触发索引,进而实现最优化查询。 参考技术D Oracle默认使用索引优化LEFT JOIN,通常情况下,只要在进行LEFT JOIN时,适当地设置了索引并且某一列的值满足相等或类似条件,就可以自动触发索引,进而实现最优化查询。

以上是关于oracleleftjoin如何触发index的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Oracle Left Join 在应该有值的地方返回 null

如何在MATLAB中添加SVM函数工具箱

微信公众号--相关资料

通达信函数详解(转)

甲骨文左联接

Oracle Left Join 导致单行子查询返回多行错误