【问题标题】:How force the database to use function based index in Oracle [duplicate]如何强制数据库在 Oracle 中使用基于函数的索引 [重复]
【发布时间】:2020-02-09 14:47:18
【问题描述】:

这是代码,我正在尝试创建一个基于函数的索引。

但是Oracle在计算查询结果时并没有应用它。

当我不使用两个表时,一切正常

【问题讨论】:

  • 如果它有助于提高性能,它的优化器选择使用索引。
  • 就优化器而言,索引并没有真正的好处。您应该将列 SERVEDBYAMOUNT 添加到索引中,然后仅在子查询中选择所需的列。
  • 为什么要使用子查询?

标签: sql oracle performance


【解决方案1】:

使用INDEX 提示:

SELECT SUM(AMOUNT)
  FROM (SELECT /*+ INDEX(P SERVICE_INDEX) */
               P.*, E.* 
          FROM PURCHASE P
          INNER JOIN EMP E
            ON E.EMPNO = P.SERVEDBY
          WHERE INSTR(P.SERVICETYPE, 'Software') = 0) 
  WHERE DEPTNO = 50

请注意,优化器可能有很好的理由忽略您的索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 2019-06-05
    • 1970-01-01
    • 2013-03-24
    • 2017-06-23
    • 1970-01-01
    相关资源
    最近更新 更多