【问题标题】:ORACLE: force like to use index? [duplicate]ORACLE:强制喜欢使用索引? [复制]
【发布时间】:2018-04-02 09:16:02
【问题描述】:

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

SPONSOR_ID     number
NR_CERTIFICATE char(11)

这两列都有索引

NR_CERTIFICATE + SPONSOR_ID

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

SELECT * FROM TBL_XXX WHERE NR_CERTIFICATE = '33300123456'

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

SELECT * FROM TBL_XXX WHERE NR_CERTIFICATE LIKE '%123456'

然后选择大约需要 15 秒。

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

【问题讨论】:

    标签: oracle select query-optimization sql-like


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      如果您通过提示强制使用索引,Oracle 将执行全索引扫描。 你不会感兴趣。如果你的查询有意义,可能你的数据模型不合适。也许一个好方法是将你的 nr_certificate 列分成两列。如果可能的话,您在进行良好快速的查询之后会很容易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-13
        • 2018-09-22
        • 1970-01-01
        • 1970-01-01
        • 2012-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多