如何在Oracle中强制数据库使用基于函数的索引[重复]

问题描述 投票:0回答:1

此问题已经在这里有了答案:

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

但是Oracle在计算查询结果时未应用它。

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

CREATE INDEX SERVICE_INDEX ON PURCHASE(INSTR(SERVICETYPE,'Software'));

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

sql oracle performance
1个回答
0
投票

使用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

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

© www.soinside.com 2019 - 2024. All rights reserved.