Oracle for JOIN中的索引似乎没有提高性能

时间:2017-05-07 00:32:05

标签: sql oracle performance join indexing

我正在尝试使用索引来提高查询性能:

SELECT E.CLIENT, E.TITLE                     
FROM (SELECT  D.CLIENT, D.TITLE, COUNT('X') TEMPORADAS
      FROM  (SELECT A.CLIENT, A.TITLE
                FROM (SELECT CLIENT,TITLE,SEASON, COUNT('X') N_EPISODIOS
                       FROM LIC_SERIES GROUP BY CLIENT,TITLE,SEASON) A
                JOIN SEASONS B ON (A.TITLE=B.TITLE AND A.SEASON=B.SEASON AND A.N_EPISODIOS=B.EPISODES)) D
      GROUP BY D.CLIENT, D.TITLE) E
JOIN SERIES F ON (E.TITLE=F.TITLE AND E.TEMPORADAS=F.TOTAL_SEASONS)

主要思想是创建两个索引,其中包含来自内部查询(最深的JOIN)的ON子句中的值:

DROP INDEX INDEX_TAPS_MOVIES;
DROP INDEX INDEX_CASTS;

CREATE INDEX INDEX_TAPS_MOVIES
ON TAPS_MOVIES(TITLE);


CREATE INDEX INDEX_CONTRACTS
ON CASTS(TITLE);

但是在分析结果之后,加载时间没有任何改善......我试图强制使用提示,但我的性能最差。在这些类型的查询中使用Index的关键是什么? 应该是优化它而不是索引的更好方法吗?

最基本的问候

1 个答案:

答案 0 :(得分:0)

Oracle优化器并不总是使用索引。它检查不同的执行计划并选择最佳的一个。有时不使用索引返回更好的性能。 为了提高性能,你可以平行你的表(参见oracle中的parallelizem)。 使表格执行并行使用以下代码:     ALTER TABLES YourTableName PARALLEL 4;

或者您可以使用以下提示:     / * + PARALLEL(4)* / 关于parallelizem的学位。