gpt4 book ai didi

sql - 阅读 Oracle 解释计划

转载 作者:行者123 更新时间:2023-12-02 01:12:41 24 4
gpt4 key购买 nike

explain plan for 
SELECT * FROM schema2.mv_a_data mv
WHERE mv.routing_code_type_id = 3
AND mv.static_data_status_id IN(5, 8)
AND mv.acct_currency_ind_id NOT IN
(SELECT DISTINCT te.acct_currency_ind_id
FROM schema1.tem_ele te
WHERE te.lis_tem_id IN
(SELECT lis_tem_id
FROM schema1.lis_tem
WHERE lis_tem.template_type_id = 2
AND lis_tem.deleted_flag = 'N' )
AND te.acct_currency_ind_id IS NOT NULL
)
ORDER BY mv.treasury_region_code,
mv.legal_entity_mnemonic,
mv.currency_code;

select *
from TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', null,'ADVANCED'));

------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 892 | 318K| 69 (2)| 00:00:01 |
| 1 | SORT ORDER BY | | 892 | 318K| 69 (2)| 00:00:01 |
|* 2 | HASH JOIN RIGHT ANTI | | 892 | 318K| 68 (0)| 00:00:01 | `
| 3 | VIEW | VW_NSO_1 | 1457 | 8742 | 11 (0) | 00:00:01 |
|* 4 | HASH JOIN | | 1457 | 33511 | 11 (0)| 00:00:01 |
|* 5 | TABLE ACCESS FULL | lis_tem | 100 | 1100 | 3 (0)| 00:00:01 |
|* 6 | TABLE ACCESS FULL | tem_ele | 3271 | 39252 | 8 (0)| 00:00:01 |
|* 7 | MAT_VIEW ACCESS FULL| mv_a_data | 2348 | 825K| 57 (0)| 00:00:01 |

我正在尝试阅读给定的解释计划。查看解释计划并根据
据我了解,首先,LIS_TEM 表和 TEM_ELE 的 FTS 完成,然后使用 HASH JOIN 将它们连接起来。

问题 1 - 我可以将此 HASH JOIN 更改为 NESTED LOOP 吗?

我问只是为了学习目的。我知道 HASH JOIN 在这里很好。
在 HASH JOIN 之后,我猜它会转到 ID3,即 VIEW VW_NSO_1 和 ID7 MAT_VIEW。

问题 2 - 这个VIEW VW_NSO_1是什么,SQL查询的哪个子句负责把它带到这里?
问题 3 - 我将如何阅读计划的其余部分?
问题 4 - 为什么 HASH JOIN RIGHT ANTI 出现在图片中?

请帮助我详细了解上述解释计划。谢谢,如果您需要更多详细信息,请告诉我。

最佳答案

"can I change this HASH JOIN to NESTED LOOP?"



您可以试试 use_nl暗示。 Find out more

"what is this VIEW VW_NSO_1, which clause of the SQL query was responsible to brought it here?"


VW_NSO_1表示 IN 的取消嵌套将子查询转换为 View 。那是因为您的子查询使用 DISTINCT,所以保证了一个唯一的集合。此操作未记录在 11g 文档中,但 you can find it in the older Tuning Guides.

"How I will read the rest of the plan?"



嗯,适当注意细节?基本上所有涉及的表都足够小并且缺乏有用的索引,因此优化器已经为全表扫描提供了大量支持。

"Why HASH JOIN RIGHT ANTI came in picture?"



想想 NOT IN子查询作为一种外连接。您希望 MView 中的记录与子查询中的行不匹配 - 反连接。在您的查询中,这将是一个 LEFT OUTER JOIN。但是,优化器已经决定首先收集子查询的结果集比评估 MView 上的反联接更有效,这是一个右外联接。 Dion Cho 在这方面写了一篇非常好的文章。 Find out more .

关于sql - 阅读 Oracle 解释计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44363959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com