【问题标题】:How to use hints when using like '%%' in Oracle?It use index but do not work在 Oracle 中使用 like '%%' 时如何使用提示?它使用索引但不起作用
【发布时间】:2020-10-31 11:59:48
【问题描述】:

我有一个名为 TB_STUDENT 的表,其中有两个字段名为 STUDENT_NAMESTUDENT_IDSTUDENT_NUMBER,并且至少有 100000 行数据。现在我已经创建了两个索引,我想根据 student_name 搜索学生。我有使用提示,但似乎仍然是TABLE ACCESS FULL。如何更改我的SQL?

 CREATE index  IDX_STUDENT_ID ON CUST (STUDENT_ID);
 CREATE index IDX_STUDENT_NAME ON CUST (STUDENT_NAME);
 SELECT  /*+ INDEX(IDX_STUDENT_ID ,IDX_STUDENT_NAME ) */STUDENT_ID,STUDENT_NAME FROM TB_STUDENT S WHERE STUDENT_NAME LIKE '%LUSY%';

【问题讨论】:

    标签: oracle indexing oracle11g oracle10g oracle-sqldeveloper


    【解决方案1】:

    索引将数据存储在排序树中,使搜索更容易。对于varchar 列,这意味着数据按字典顺序排序。如果您在字符串的末尾(甚至中间)有一个通配符,那么使用索引是有意义的,但是在这里,您在字符串的开头有一个通配符,这意味着该值可以是 anywhere 在索引中。在这种情况下,使用索引对扫描整个表没有好处,优化器将选择不使用索引。提示正是它们的名字所暗示的 - 提示 - 并且不能强制优化器在无效用例中使用索引。

    【讨论】:

      猜你喜欢
      • 2020-03-07
      • 2011-10-02
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      相关资源
      最近更新 更多