Oracle 如何处理(选择/位置)和连接执行计划
Posted
技术标签:
【中文标题】Oracle 如何处理(选择/位置)和连接执行计划【英文标题】:How Oracle handles (select/where) and a join execution plan 【发布时间】:2015-11-16 12:36:19 【问题描述】:如果我有这样一个简单的查询:
SELECT table1.col3, table2.col3 FROM table1 LEFT OUTER JOIN table2
ON table1.col1 = table2.col1
WHERE table1.col2>0;
-Oracle 执行计划是先选择 table1 中满足 where 子句条件的所有内容,然后加入表或虎钳还是顺序的,还是找到节省资源或性能的最佳路线?
【问题讨论】:
为什么不看执行计划? 它将根据它认为最快的方式生成一个查询计划,并按照这种方式执行。您将在查询计划中看到它在做什么 这里有两个关于 Oracle 基于成本的优化器的非常好的文档 - The Oracle Optimizer Explain the Explain Plan、The Optimizer。 【参考方案1】:Oracle 是一个功能强大的数据库,它为这样的查询提供了多种不同的选项。特定类别的算法包括嵌套循环连接、散列连接、合并连接和基于索引的连接。优化器根据数据和软硬件环境的特点选择最佳的执行计划。
如果您有大表并且col2 > 0
具有相当的选择性并且在table1(col2)
上有一个索引,那么Oracle 可能会先使用该索引进行过滤,然后再执行连接。
【讨论】:
基于索引的连接本身并不是一种连接类型。索引可以像任何其他表一样使用常规嵌套循环、哈希和合并连接算法与其他表和索引连接,因为索引只不过是表的精简排序版本。以上是关于Oracle 如何处理(选择/位置)和连接执行计划的主要内容,如果未能解决你的问题,请参考以下文章