oracle - 为什么这里的访问谓词和过滤谓词是相同的?

标签 oracle oracle-sqldeveloper sql-execution-plan sqlperformance sql-tuning

enter image description here

当我使用 Oracle SQL Developer 获取上述查询的自动跟踪输出时,我发现连接条件用于访问和过滤谓词。我的问题是,它是否从DEPT_ID_PK读取所有department_ids,然后使用这些ID来访问和过滤员工表?如果是这样,为什么员工表要进行全表扫描?为什么它使用departments表的department_ids再次读取employees表?谁能简单地一步步阅读这个执行计划,并解释一下这里使用访问谓词和过滤谓词的原因吗?

最诚挚的问候

最佳答案

它是合并联接(有点像散列联接,当联接表的投影在联接列上排序时使用合并联接。合并联接比散列联接速度更快,使用的内存更少)。

因此Oracle对外表(EMPLOYEES)进行全表扫描,并以有序方式读取内表。

过滤谓词是要进行投影的列

更多详情:https://datacadamia.com/db/oracle/merge_join

关于oracle - 为什么这里的访问谓词和过滤谓词是相同的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65716287/

相关文章:

sql - 我们在查询中使用 join 的顺序是否会影响其执行时间?

java - Oracle SqlDeveloper 找不到正确的 JDK

oracle - sdcli 格式 - 提供自定义配置文件

sql-server - 过滤索引寻找 `is NULL` 条件并扫描相反的条件

PostgreSql:具有相同列的不同查询计划

oracle - 在Oracle中查找存储过程的依赖元素

regex - 匹配字符串中超过 9 位数字的 9 位数字

sql - 在没有 LIKE 的情况下检查 Oracle 中字符串中的子字符串

java - 通过jdbc向Oracle中插入表

java - 为大文件构建动态查询