ORACLE:强制喜欢使用索引? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE:强制喜欢使用索引? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我有一个表,其中包括两列

SPONSOR_ID     number
NR_CERTIFICATE char(11)

这两列有一个索引

NR_CERTIFICATE + SPONSOR_ID

这个表有几十万行,问题是,当我们按特定证书过滤时,select按预期需要纳秒:

SELECT * FROM TBL_XXX WHERE NR_CERTIFICATE = '33300123456'

问题是当我们使用LIKE过滤时:

SELECT * FROM TBL_XXX WHERE NR_CERTIFICATE LIKE '%123456'

然后选择大约需要15秒。

我知道在这种情况下,索引被丢弃并进行表扫描。在这种情况下,有没有办法强制ORACLE使用索引?或者有没有办法加快这个选择?

答案

您可以使用optimizer hints“强制”使用索引:

SELECT /*+INDEX(TBL_XXX,YOUR_INDEX_NAME)*/ * 
FROM TBL_XXX 
WHERE NR_CERTIFICATE LIKE '%123456'

这回答了问题,但不确定这是否会解决您的问题。您应该显示表结构并解释计划以获得进一步的帮助

另一答案

如果强制使用带有提示的索引,Oracle将执行完整的索引扫描。它对您来说不会有意思。如果您的查询有意义,可能您的数据模型不合适。也许一个好方法是将列nr_certificate分成两列。如果可能的话,您可以很容易地获得良好而快速的查询。

以上是关于ORACLE:强制喜欢使用索引? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL中常用的强制性操作(例如强制索引)

微软的mssql有没有象oracle一样的强制索引,如何使用?

Oracle:强制使用索引

Oracle:在索引搜索上强制并行

oracle 中sql语句怎么加多个强制索引

oracle的SQL索引使用