【问题标题】:How Oracle handles (select/where) and a join execution planOracle 如何处理(选择/位置)和连接执行计划
【发布时间】: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 PlanThe Optimizer

标签: sql oracle sql-execution-plan


【解决方案1】:

Oracle 是一个功能强大的数据库,它为这样的查询提供了多种不同的选项。特定类别的算法包括嵌套循环连接、散列连接、合并连接和基于索引的连接。优化器根据数据和软硬件环境的特点选择最佳的执行计划。

如果您有大表并且col2 > 0 具有相当的选择性并且在table1(col2) 上有一个索引,那么Oracle 可能会先使用该索引进行过滤,然后再执行连接。

【讨论】:

  • 基于索引的连接本身并不是一种连接类型。索引可以像任何其他表一样使用常规嵌套循环、哈希和合并连接算法与其他表和索引连接,因为索引只不过是表的精简排序版本。
猜你喜欢
  • 2021-12-28
  • 2010-11-05
  • 2017-03-05
  • 2016-12-09
  • 2021-07-20
  • 2023-03-23
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多