此问题已经在这里有了答案:
这里是代码,我正在尝试创建基于函数的索引。
但是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'));
当我不使用两个表时,一切正常
使用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
请注意,优化器可能有很好的理由忽略索引。