- Optimisation d'une requete [ORA] - SQL/NoSQL - Programmation
MarshPosté le 31-08-2006 à 13:27:00
Bonjour,
J'ai une requete sur Oracle 9i qui prend pas mal de temps a s'executé. C'est dans le cadre d'un projet web Java/J2EE. Voici la requete :
select distinct methode.ID, methode.WORKFLOW_ID, methode.CODE, ope.Code as OPE_CODE, opeLabel.label as OPE_LABEL, ele.label as ELE, methodUsers.USER_UID as REDACTEUR_UID, methode.ETAT, methode.THEO_BEGIN_DATE, methode.THEO_END_DATE, methode.REAL_BEGIN_DATE, methode.REAL_END_DATE, methode.FIRST_DIFFUSION_DATE, methode.LAST_DIFFUSION_DATE, methode.IMPORTANCE, methode.ARCHIVAGE, methode.MARK, methode.LAST_BAT_DATE, methode.METHOD_VERSION, methode.VERSION, methode.TYPE_REPRISE, methode.LANGUE_ORIGINE, sujet.CODE as SUJET_CODE, labelSujet.LABEL as SUJET_TITRE, prof2.LABEL as METIER_LABEL, sujetType.FK_IDPROFESSION as METIER_ID, ty2.LABEL as TYPE_DOC_LABEL, ty1.ID as TYPE_DOC_ID, etapeCouranteWF.STEP_ID, etapeCouranteWF.STATUS as WF_STATUS, dl2.CODE as CODE_LOT, ll1.LABEL as TITRE_LOT, veh.ID as ID_VEHICLE, veh.CODE as CODE_VEHICLE, labelVeh.LABEL as LABEL_VEHICLE from AE7QTME1 methode, AE7QTLKA lienMethodeSujet, AE7QTSU1 sujet, AE7QTTS1 sujetType, AE7QTSL1 labelSujet, AE7QTPR1 prof1, AE7QTPR2 prof2, AE7QTTM1 tm1, AE7QTTY1 ty1, AE7QTTY2 ty2, AE7QTOS2 etapeCouranteWF, AE7QTMU1 methodUsers, AE7QTOP1 ope, AE7QTOP2 opeLabel, AE7QTEL3 ele, AE7QTLKB lkb, AE7QTDL2 dl2, AE7QTLL1 ll1, AE7QTEV1 evePro, AE7QTVD1 decoupage, AE7QTVE1 veh, AE7QTVL1 labelVeh where methode.canceled=0 AND methode.ID = lienMethodeSujet.FK_METHOD_ID and lienMethodeSujet.FK_SUBJECT_ID = sujet.ID and lienMethodeSujet.WORKFLOW_FLAG = 1 and sujet.ID = labelSujet.FK_SUBJECT_ID and methode.WORKFLOW_ID = etapeCouranteWF.ENTRY_ID and methodUsers.FK_METHOD_ID = methode.ID and methode.FK_OPE_ID=ope.ID and opeLabel.FK_OPE_ID = ope.ID and ele.FK_METHOD_ID = methode.ID and ele.LANGUAGE ='fr_FR' and opeLabel.LANGUAGE='fr_FR' and methodUsers.USER_TYPE='REDACTEUR' and labelSujet.LANGUAGE='fr_FR' and methodUsers.USER_UID='E276281' and etapeCouranteWF.STEP_ID=5 and lkb.FK_SUBJECT_ID=sujet.ID and dl2.ID=lkb.FK_LOT_ID and ll1.FK_LOT_ID=dl2.ID and sujetType.ID = lkb.FK_TYPICAL_SUBJECT_ID and evePro.FK_LOT_ID=dl2.ID and decoupage.ID=evePro.FK_DECOUPAGE_ID and veh.ID=decoupage.FK_VEHICLE_ID and labelVeh.FK_VEHICLE_ID=veh.ID and prof1.ID = sujetType.FK_IDPROFESSION and lienMethodeSujet.FK_TYPICAL_METHOD_ID = tm1.ID and prof2.FK_PROF_ID = prof1.ID and ty1.ID = tm1.FK_TYPE_ID and ty2.FK_TYPE_ID = ty1.ID and ll1.language='fr_FR' and ty2.LANGUAGE='fr_FR' and prof2.LANGUAGE='fr_FR' and labelVeh.LANGUAGE='fr_FR' and ( etapeCouranteWF.STATUS='A_REDIGER' or etapeCouranteWF.STATUS='COMMENCE' or etapeCouranteWF.STATUS='EN_COURS_DE_REDACTION' ) order by methode.THEO_BEGIN_DATE desc
Est ce que quelqu'un voit un moyen pour l'optimiser ? J'ai fait des jointures de base ne connaissant pas bien le SQL ...
Marsh Posté le 31-08-2006 à 13:27:00
Bonjour,
J'ai une requete sur Oracle 9i qui prend pas mal de temps a s'executé. C'est dans le cadre d'un projet web Java/J2EE.
Voici la requete :
select
distinct methode.ID,
methode.WORKFLOW_ID,
methode.CODE,
ope.Code as OPE_CODE,
opeLabel.label as OPE_LABEL,
ele.label as ELE,
methodUsers.USER_UID as REDACTEUR_UID,
methode.ETAT,
methode.THEO_BEGIN_DATE,
methode.THEO_END_DATE,
methode.REAL_BEGIN_DATE,
methode.REAL_END_DATE,
methode.FIRST_DIFFUSION_DATE,
methode.LAST_DIFFUSION_DATE,
methode.IMPORTANCE,
methode.ARCHIVAGE,
methode.MARK,
methode.LAST_BAT_DATE,
methode.METHOD_VERSION,
methode.VERSION,
methode.TYPE_REPRISE,
methode.LANGUE_ORIGINE,
sujet.CODE as SUJET_CODE,
labelSujet.LABEL as SUJET_TITRE,
prof2.LABEL as METIER_LABEL,
sujetType.FK_IDPROFESSION as METIER_ID,
ty2.LABEL as TYPE_DOC_LABEL,
ty1.ID as TYPE_DOC_ID,
etapeCouranteWF.STEP_ID,
etapeCouranteWF.STATUS as WF_STATUS,
dl2.CODE as CODE_LOT,
ll1.LABEL as TITRE_LOT,
veh.ID as ID_VEHICLE,
veh.CODE as CODE_VEHICLE,
labelVeh.LABEL as LABEL_VEHICLE
from AE7QTME1 methode,
AE7QTLKA lienMethodeSujet,
AE7QTSU1 sujet,
AE7QTTS1 sujetType,
AE7QTSL1 labelSujet,
AE7QTPR1 prof1,
AE7QTPR2 prof2,
AE7QTTM1 tm1,
AE7QTTY1 ty1,
AE7QTTY2 ty2,
AE7QTOS2 etapeCouranteWF,
AE7QTMU1 methodUsers,
AE7QTOP1 ope,
AE7QTOP2 opeLabel,
AE7QTEL3 ele,
AE7QTLKB lkb,
AE7QTDL2 dl2,
AE7QTLL1 ll1,
AE7QTEV1 evePro,
AE7QTVD1 decoupage,
AE7QTVE1 veh,
AE7QTVL1 labelVeh
where methode.canceled=0
AND methode.ID = lienMethodeSujet.FK_METHOD_ID
and lienMethodeSujet.FK_SUBJECT_ID = sujet.ID
and lienMethodeSujet.WORKFLOW_FLAG = 1
and sujet.ID = labelSujet.FK_SUBJECT_ID
and methode.WORKFLOW_ID = etapeCouranteWF.ENTRY_ID
and methodUsers.FK_METHOD_ID = methode.ID
and methode.FK_OPE_ID=ope.ID
and opeLabel.FK_OPE_ID = ope.ID
and ele.FK_METHOD_ID = methode.ID
and ele.LANGUAGE ='fr_FR'
and opeLabel.LANGUAGE='fr_FR'
and methodUsers.USER_TYPE='REDACTEUR'
and labelSujet.LANGUAGE='fr_FR'
and methodUsers.USER_UID='E276281'
and etapeCouranteWF.STEP_ID=5
and lkb.FK_SUBJECT_ID=sujet.ID
and dl2.ID=lkb.FK_LOT_ID
and ll1.FK_LOT_ID=dl2.ID
and sujetType.ID = lkb.FK_TYPICAL_SUBJECT_ID
and evePro.FK_LOT_ID=dl2.ID
and decoupage.ID=evePro.FK_DECOUPAGE_ID
and veh.ID=decoupage.FK_VEHICLE_ID
and labelVeh.FK_VEHICLE_ID=veh.ID
and prof1.ID = sujetType.FK_IDPROFESSION
and lienMethodeSujet.FK_TYPICAL_METHOD_ID = tm1.ID
and prof2.FK_PROF_ID = prof1.ID
and ty1.ID = tm1.FK_TYPE_ID
and ty2.FK_TYPE_ID = ty1.ID
and ll1.language='fr_FR'
and ty2.LANGUAGE='fr_FR'
and prof2.LANGUAGE='fr_FR'
and labelVeh.LANGUAGE='fr_FR'
and
(
etapeCouranteWF.STATUS='A_REDIGER' or etapeCouranteWF.STATUS='COMMENCE' or etapeCouranteWF.STATUS='EN_COURS_DE_REDACTION'
)
order by methode.THEO_BEGIN_DATE desc
Est ce que quelqu'un voit un moyen pour l'optimiser ? J'ai fait des jointures de base ne connaissant pas bien le SQL ...
Merci !