[SQL-ORACLE] Optimisation?
Bj0
Messages postés
74
Date d'inscription
Statut
Membre
Dernière intervention
-
TIZIRI3 -
TIZIRI3 -
je ne comprend pas trés bien mes temps d'exécution de ma Requete SQL que j 'exécute sur une base de données oracle.
Ma requete est bien évidenment longue a s'exécuter ( 1 UNION et une jointure de 4 tables dans chaque partie et ces tables peuvent atteindre plus de 20 M de lignes (M= Million bien sur :p))
la voici (attention aux yeux :D ) :
lorsque je remplace :
#DATE_DEBUT# par '1-1-2006'
#DATE_FIN# par '31-12-2008'
#DATE_FIN_ANNEE_1# par '31-12-2006'
#DATE_FIN_ANNEE_2# par '31-12-2007'
Cette requète met environ 2 min ... ( je trouve le temps pas mal et il me convient)
mais ces valeur ne doivent pas êtres écrite ainsi " en dur" elle doivent etre recherché dans une table de 1 seule ligne
mais quand je remplace :
#DATE_DEBUT# par (SELECT Date_debut FROM periodeTmp)
#DATE_FIN# par (SELECT Date_fin FROM periodeTmp)
#DATE_FIN_ANNEE_1# par (SELECT Date_fin_annee_1 FROM periodeTmp)
#DATE_FIN_ANNEE_2# par (SELECT Date_fin_annee_2 FROM periodeTmp)
Ces sous requètes ne sont pa liées,la vitesse d exécution de cette nouvelle requete devrait être quasiment la même que la précédente
or ce n'est pa du tout le cas : il met environ 2 h a sexécuter mais donne bien le bon résultat.
je ne pense pas que ce soit une erreur de format. ( ils sont tous format DATE)
a quoi est dut cette différence ?
Merci d'avance
Ma requete est bien évidenment longue a s'exécuter ( 1 UNION et une jointure de 4 tables dans chaque partie et ces tables peuvent atteindre plus de 20 M de lignes (M= Million bien sur :p))
la voici (attention aux yeux :D ) :
(SELECT substr((D.VAL_NUMERIQUE_15/3600000),1,3) as FV, A.MATRICULE_EMPLOYE as matricule, substr(D.ID_EMPLOYE,1,5)as ID, to_char (B.DTJ_DEB,'YYYYMMDD'), to_char (B.DTJ_FIN,'YYYYMMDD'), substr(C.VALEUR_CARACTERE,1,1), (to_char (D.DTJ_VALORISATION,'YYYYMMDD')) FROM EMP_EMPLOYES A, EMP_PERIODES B, DIC_VALEURS_CHP_HISTOS_SYNTHES C, CPT_VALEURS_YYYYXX1 D WHERE ( A.ID_EMPLOYE = B.ID_EMPLOYE AND A.ID_EMPLOYE = C.ID_ENTITE_FONCTIONNELLE(+) AND A.ID_EMPLOYE = D.ID_EMPLOYE AND B.DTJ_FIN between C.DTJ_DEB and C.DTJ_FIN AND B.DTJ_FIN = D.DTJ_VALORISATION AND to_char (B.DTJ_FIN ,'YYYYMMDD') BETWEEN #DATE_DEBUT# AND #DATE_FIN# AND A.MATRICULE_EMPLOYE BETWEEN '01' AND '51' AND C.ID_CHAMP_PERSO = 'H30' AND A.ID_EMPLOYE in ( SELECT ID_ENTITE_FONCTIONNELLE FROM DIC_VALEURS_CHP_HISTOS_SYNTHES WHERE ID_CHAMP_PERSO = 'J10' AND VALEUR_CARACTERE = '0' ) ) ) UNION (SELECT substr((D.VAL_NUMERIQUE_15/3600000),1,3) as FV, A.MATRICULE_EMPLOYE as matricule, substr(D.ID_EMPLOYE,1,5)as ID, to_char (B.DTJ_DEB,'YYYYMMDD'), to_char (B.DTJ_FIN,'YYYYMMDD'), substr(C.VALEUR_CARACTERE,1,1), (to_char (D.DTJ_VALORISATION,'YYYYMMDD')) FROM EMP_EMPLOYES A, EMP_PERIODES B, DIC_VALEURS_CHP_HISTOS_SYNTHES C, CPT_VALEURS_YYYYXX1 D WHERE ( A.ID_EMPLOYE = B.ID_EMPLOYE AND A.ID_EMPLOYE = C.ID_ENTITE_FONCTIONNELLE(+) AND A.ID_EMPLOYE = D.ID_EMPLOYE AND D.DTJ_VALORISATION in (#DATE_FIN_ANNEE_1#, #DATE_FIN_ANNEE_2#) AND D.DTJ_VALORISATION between B.DTJ_DEB and B.DTJ_FIN AND D.DTJ_VALORISATION between C.DTJ_DEB and C.DTJ_FIN AND A.MATRICULE_EMPLOYE BETWEEN '01' AND '51' AND C.ID_CHAMP_PERSO = 'H30' AND A.ID_EMPLOYE in ( SELECT ID_ENTITE_FONCTIONNELLE FROM DIC_VALEURS_CHP_HISTOS_SYNTHES WHERE ID_CHAMP_PERSO = 'J10' AND VALEUR_CARACTERE = '0' ) ) ) ORDER BY matricule;
lorsque je remplace :
#DATE_DEBUT# par '1-1-2006'
#DATE_FIN# par '31-12-2008'
#DATE_FIN_ANNEE_1# par '31-12-2006'
#DATE_FIN_ANNEE_2# par '31-12-2007'
Cette requète met environ 2 min ... ( je trouve le temps pas mal et il me convient)
mais ces valeur ne doivent pas êtres écrite ainsi " en dur" elle doivent etre recherché dans une table de 1 seule ligne
mais quand je remplace :
#DATE_DEBUT# par (SELECT Date_debut FROM periodeTmp)
#DATE_FIN# par (SELECT Date_fin FROM periodeTmp)
#DATE_FIN_ANNEE_1# par (SELECT Date_fin_annee_1 FROM periodeTmp)
#DATE_FIN_ANNEE_2# par (SELECT Date_fin_annee_2 FROM periodeTmp)
Ces sous requètes ne sont pa liées,la vitesse d exécution de cette nouvelle requete devrait être quasiment la même que la précédente
or ce n'est pa du tout le cas : il met environ 2 h a sexécuter mais donne bien le bon résultat.
je ne pense pas que ce soit une erreur de format. ( ils sont tous format DATE)
a quoi est dut cette différence ?
Merci d'avance
A voir également:
- [SQL-ORACLE] Optimisation?
- Optimisation pc - Accueil - Utilitaires
- Optimisation découpe panneau gratuit - Télécharger - Outils professionnels
- Logiciel sql - Télécharger - Bases de données
- Démarrage d'android en cours optimisation de l'application - Forum Téléphones & tablettes Android
- Sql lister les tables ✓ - Forum Programmation