gpt4 book ai didi

Oracle - 了解 no_index 提示

转载 作者:行者123 更新时间:2023-12-04 21:54:28 25 4
gpt4 key购买 nike

我试图了解 no_index 实际上如何加快查询速度,并且无法在线找到文档来解释它。

例如我有这个查询运行 极慢

select  * 
from <tablename>
where field1_ like '%someGenericString%' and
field1_ <> 'someSpecificString' and
Action_='_someAction_' and
Timestamp_ >= trunc(sysdate - 2)

我们的一位 DBA 能够通过这样做显着加快速度
select  /*+ NO_INDEX(TAB_000000000019) */ * 
from <tablename>
where field1_ like '%someGenericString%' and
field1_ <> 'someSpecificString' and
Action_='_someAction_' and
Timestamp_ >= trunc(sysdate - 2)

我不明白为什么?我想弄清楚为什么会这样,所以我可以看看我是否可以将它应用到另一个查询(这个是一个连接)来加速它,因为它需要更长的时间来运行。

谢谢!

** 更新 **
以下是我对示例中表格的了解。
  • 这是一个“分区表”
  • TAB_000000000019 是表而不是其中的列
  • field1 已编入索引
  • 最佳答案

    Oracle 的优化器判断如何最好地运行查询,为此它使用收集到的关于表和索引的大量统计信息。例如,根据这些统计信息,它决定是否使用索引,或者只进行表扫描。

    至关重要的是,这些统计数据不会自动更新,因为收集它们可能非常昂贵。在统计数据不是最新的情况下,优化器可能会做出“错误”的决定,并且可能会在实际上进行表扫描更快时使用索引。

    如果 DBA/开发人员知道这一点,他们可以向优化器提供提示(即 NO_INDEX 是什么),告诉它不要使用给定的索引,因为众所周知它会减慢速度,通常是由于-日期统计。

    在您的示例中,TAB_000000000019将引用一个索引或一个表(我猜是一个索引,因为它看起来像一个自动生成的名称)。

    老实说,这有点像黑色艺术,但据我了解,这就是它的要点。

    免责声明:我不是 DBA,但我涉足该领域。

    关于Oracle - 了解 no_index 提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4750597/

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