gpt4 book ai didi

sql - 为什么 Oracle 在同一索引上使用范围扫描和快速全扫描?

转载 作者:行者123 更新时间:2023-12-04 15:20:36 24 4
gpt4 key购买 nike

我有一个奇怪的情况:

有一个查询(对象的名称当然是不同的)

enter image description here

在 grante[pm, st] 上还有一个索引 GRANTEE_INDEX_01(每个表都有相似的索引 [pm,st]),我不知道为什么——但是 oracle 对同一个索引进行索引范围扫描和快速全扫描,而且我无法将其从他的……核心中剔除。

实际上没有性能问题,至少没有人提示。我只想知道为什么会这样?

最佳答案

线索是这是[Oracle 12c]。您在这里看到的是自适应游标功能的体现。这是 Oracle 在 12c 中添加的一个(有争议的)特性,如果它认为使用现有计划的查询运行速度太慢,它允许优化器更改为不同的计划。

Oracle 实际上为您的查询提出了两种计划,一种使用散列连接,另一种使用嵌套循环。它正在执行一个计划,但正在使用 STATISTICS COLLECTOR 操作来监视另一个计划;这就是 CBO 决定是否切换到另一个计划的方式。您在 GRANTEE_INDEX_01 上看到了两次匹配,因为它在两个计划中都使用了。

顺便说一句,解释计划应该有一些额外的信息(尝试文本或 HTML View )来告诉你这一点。

Note
-----
- this is an adaptive plan (rows marked '-' are inactive)

非事件行是备用计划连接和 STATISTICS COLLECTOR 操作。

如果您想了解更多信息,Maria Colgan 在 on the official Oracle blog site 中写道.不可避免地,Tim Hall 在他的文章上也写了一篇好文章Oracle-Base site .


我将自适应游标描述为有争议的。这是一个许多 DBA 不喜欢的功能,当它刚出来时就把它关掉了。他们的反对主要围绕它的不可预测性:DBA 喜欢他们的 SQL 有稳定的执行计划。此外,我将包括 Chris Saxon 的评论,因为他比我更接近产品:

I'd argue it's adaptive statistics, not adaptive plans that caused most the controversy. Which is why this was split into two parameters in 12.2, with adaptive plans on and adaptive stats off by default.

关于sql - 为什么 Oracle 在同一索引上使用范围扫描和快速全扫描?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63410006/

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