J'ai eu exactement le même besoin aujourd'hui. Je n'avais pas de vraie contrainte en performance, et donc j'ai gardé ma version très lente. Mais suite à la lecture de ta question, je viens de tâtonner, pour voir.
Ma requête renvoie environ 10000 lignes (et 9000 après distinct ou en fait Group by dans mon cas).
Sans le distinct, ma requête est quasi instantanée.
Mais c'est une illusion d'optique.
Quand je lance ma requête (SQL Developper), elle me renvoie quasi instantanément mes 50 premières lignes. Mais si je lui demande d'afficher les 50 suivantes, etc etc, le temps d'exécution augmente. Et en fait, pour m'afficher les 10000 lignes, il faut une minute.
Et quand j'ajoute le DISTINCT ou le GROUP BY, il faut toujours une minute.
Ma fonction a été écrite avec les pieds. C'est elle qui est en cause, et pas le DISTINCT.
J'ai tenté des trucs comme ci-dessous, mais ça ne change rien :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
With X as
(select /*+ materialize */
T1.ID,
T2.TAP_ID,
V1.CH1,
FONCTION1(T1.ID) AS CH2,
FONCTION2(T1.ID) AS CH3,
FONCTION3(T1.ID) AS CH4
FROM TABLE1 T1
JOIN VUE1 V1 ON T1.V1_ID = V1.ID
JOIN TABLE2 T2 ON T1.ID = T2.T1_ID
)
select distinct id, tap_id, ch1, ch2, ch3, ch4 from X |
Mais dans mon cas, ça n'améliore rien.
Peut-être que dans ton cas, le problème est un peu différent, et cette astuce fonctionnera ?
Partager