J'ai une requête assez compliquée. J'ai écrit deux requêtes différentes pour accomplir mon objectif. La première utilise avec, d'une autre utilise des tables temporaires globales.
Premier:
WITH A
(
KNO
..
)
, B
(
KNO
...
)
, C
(
KNO
...
)
SELECT * from
A INNER JOIN B
on A.KNO = B.KNO
INNER JOIN C
on B.KNO = C.KNO
Deuxième:
Truncate Table tempA;
Truncate Table tempB;
Truncate Table tempC;
INSERT INTO tempA SELECT -- Same select which constructs WITH A
INSERT INTO tempB SELECT -- Same select which constructs WITH B
INSERT INTO tempC SELECT -- Same select which constructs WITH C
SELECT * from
tempA A INNER JOIN tempB B
on A.KNO = B.KNO
INNER JOIN tempC C
on B.KNO = C.KNO
Ils sont au pair. Ce que je veux dire, c'est que je observe même le même temps de requête avec les deux. Mais lorsque j'ajoute l'index de Kno à Tempa, TempB, Tableaux temporaires TEMPC. Deuxième skyrockets.
[.____] Ce que je veux dire, c'est que ça devient plus rapide, beaucoup. Je demande pendant 1 an de valeurs. en utilisant avec: environ 58 minutes. Utilisation de Table Table avec Index: environ 30 minutes.
Temps de requête pendant 4 mois de valeurs sont donnés ci-dessous.
En utilisant avec
DENEME@DENEME Finished 15:37:02 15:40:38 03:36 mins Select 500 WITH A
Total: 216000 MSECS
Utilisation de tables temporaires + index
DENEME@DENEME Finished 15:41:54 15:41:55 1 sec Select 500 WITH D
DENEME@DENEME Finished 15:41:38 15:41:38 665 msecs Insert 34660 INSERT INTO C
DENEME@DENEME Finished 15:41:21 15:41:35 14 secs Insert 34660 INSERT INTO B
DENEME@DENEME Finished 15:41:17 15:41:17 109 msecs Insert 1804 INSERT INTO A
DENEME@DENEME Finished 15:41:12 15:41:12 33 msecs Unknown 0 TRUNCATE TABLE C
DENEME@DENEME Finished 15:41:12 15:41:12 39 msecs Unknown 0 TRUNCATE TABLE B
DENEME@DENEME Finished 15:41:11 15:41:11 203 msecs Unknown 0 TRUNCATE TABLE A
Total: 16049 msecs
Ma question est :
Puis-je donner un indice à Oracle pour ajouter index quand il construit avec des tables temporaires?
Non, je ne pense pas que la définition d'un index pour une expression de table commune est possible.
Vous pouvez expérimenter avec la matérialiser indice, mais je ne pense pas que vous obtiendrez quelque chose plus rapidement que la solution avec des tables temporaires (indexées).
Puis-je donner un indice à Oracle pour ajouter index quand il construit avec des tables temporaires?
tempA
, tempB
_ et tempC
_ Ainsi, l'impact positif d'un indice sera au mieux au mieux (dans la plupart des cas, le CGO choisira une jointure de hachage. Vous ne sauverrez même pas une sorte) - c'est-à-dire ne essayer de le rendre plus rapide par magie en ajoutant des indexinsert
ainsi que le select