加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle – 了解no_index提示

发布时间:2020-12-12 13:13:05 所属栏目:百科 来源:网络整理
导读:我试图了解no_index如何实际加速查询并且无法在线查找文档来解释它. 例如,我的查询速度非常慢 select * from tablename where field1_ like '%someGenericString%' and field1_ 'someSpecificString' and Action_='_someAction_' and Timestamp_ = trunc(sys
我试图了解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,但我已涉足该领域.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读