Probleme de rapidité sur les dates

metalcoder Messages postés 193 Date d'inscription jeudi 14 février 2002 Statut Membre Dernière intervention 25 mars 2011 - 23 août 2006 à 11:47
metalcoder Messages postés 193 Date d'inscription jeudi 14 février 2002 Statut Membre Dernière intervention 25 mars 2011 - 24 août 2006 à 10:25
Salut tous le monde

Je suis entrain de faire un logiciel pour ma boite avec des requetes oracle. Hors sur le nombre de requete certaines sont tres longues des que les dates sont rapprochés mais egalement instantanés si les dates sont eloignés hors ce n'est pas tres logique puisque la requete ramene plus d'enregistrement.
Bien sur je pourrais mettre des dates eloignées et faire mon tri en vb pour ne ressortir que celle de la semaine mais je prefere que cela soit oracle qui le fasse.

voici ma requete si qqun a une idée

--Recuperation OF Rebut

SELECT

DISTINCT wmt
.CREATION_DATE
, wmt
.WIP_ENTITY_NAME
AS NumOF
,msib
.SEGMENT1
AS Article
,wmt

.TRANSACTION_QUANTITY
AS Qte
,wmt
.FM_OPERATION_SEQ_NUM
AS NumOP
,wmt
.REFERENCE
AS NumTNC
,wo
.DESCRIPTION
AS Description
,wmt
.TO_INTRAOPERATION_STEP_TYPE
FROM

apps
.wip_move_Transactions_v wmt
,apps
.mtl_system_items_b msib
,apps
.wip_operations wo
WHERE

msib
.ORGANIZATION_ID
=
147AND

wo
.ORGANIZATION_ID
=msib
.ORGANIZATION_ID
AND

wmt
.ORGANIZATION_ID
=msib
.ORGANIZATION_ID
AND

msib
.SEGMENT1
IN
('3011001','3011002','3011003','3011004','3011005','3011006','3011007','3011008','3011009','3011010','3011012','3011013','3011014','3011015','3011016','3011017','3011018','3011019','3011020','3011021','3011022','3011023','3011024','3011025','3011026','3011027','3011028','3011031')AND

wmt
.WIP_ENTITY_ID
=wo
.WIP_ENTITY_ID
AND

wo
.OPERATION_SEQ_NUM
=wmt
.TO_OPERATION_SEQ_NUM
AND

wmt
.TO_INTRAOPERATION_STEP_TYPE
='5'AND

wmt
.CREATION_DATE
BETWEEN
'21/08/2006'
AND
'23/08/2006'AND

wmt
.PRIMARY_ITEM_ID
=msib
.INVENTORY_ITEM_ID
ORDER

BY wmt
.creation_date
DESC

si je met du 21/06/2006 je suis plus rapide que en mettant 21/08/2006 alors que je ramene 12 resultats au lieu d'un seul.

merci d'avance

Metalcoder

2 réponses

crilun Messages postés 114 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 17 octobre 2006
23 août 2006 à 18:34
crilun,

Salut,

je bosse plutot sous SQL server mais je pense que ca doit etre le cas pour la plsu part des bases de données,

le between est plus long que 2 faire 2 comparaison , alors je ne sais pas pourquoi et ce qu'il fait exeactement derriere,

mais il vaut mieux :
(wmt
.CREATION_DATE >=
'21/08/2006' AND wmt
.CREATION_DATE<=
'23/08/2006')

test déja comme ca voir si ca change quelquechose à ton temps d'éxecution.


ensuite autre truc c'est que ta requete peut etre optimisé déja avec
les jointures car la tu mutliplie les enregsitrements de tes tables et
filtre apres alors qu'avec les jointures,

ce qui te donnerais ca :


SELECT DISTINCT

    wmt.CREATION_DATE ,

    wmt.WIP_ENTITY_NAME AS NumOF,

    msib.SEGMENT1 AS Article,

    wmt.TRANSACTION_QUANTITY AS Qte,

    wmt.FM_OPERATION_SEQ_NUM AS NumOP,

    wmt.REFERENCE AS NumTNC,

    wo.DESCRIPTION AS Description,

    wmt.TO_INTRAOPERATION_STEP_TYPE

FROM

    apps.mtl_system_items_b msib,

    LEFT JOIN apps.wip_move_Transactions_v wmt ON
(wmt.ORGANIZATION_ID=msib.ORGANIZATION_ID AND
wmt.PRIMARY_ITEM_ID=msib.INVENTORY_ITEM_ID),

    LEFT JOIN apps.wip_operations wo ON
(wo.ORGANIZATION_ID=msib.ORGANIZATION_ID AND
wmt.WIP_ENTITY_ID=wo.WIP_ENTITY_ID AND
wo.OPERATION_SEQ_NUM=wmt.TO_OPERATION_SEQ_NUM)

WHERE

    msib.ORGANIZATION_ID =147

    AND

    msib.SEGMENT1
IN('3011001','3011002','3011003','3011004','3011005','3011006','3011007','3011008','3011009','3011010','3011012','3011013','3011014','3011015','3011016','3011017','3011018','3011019','3011020','3011021','3011022','3011023','3011024','3011025','3011026','3011027','3011028','3011031')

    AND

    wmt.TO_INTRAOPERATION_STEP_TYPE='5'

    AND

    (wmt.CREATION_DATE >='21/08/2006' AND  wmt.CREATION_DATE<='23/08/2006')

ORDER BY

    wmt.creation_date DESC


voila essaye et dis moi mais normalement tu devrais gagner pas mal de temps déja comme ca
0
metalcoder Messages postés 193 Date d'inscription jeudi 14 février 2002 Statut Membre Dernière intervention 25 mars 2011 1
24 août 2006 à 10:25
Merci de ton conseil mais cela n'as rien changer.

j'ai mis des jointures a mes tables (au passage c'est un (+) qu'il faut mettre sur oracle)
et j'ai egalement changer le between mais sans resultat. Peut etre un peu plus rapide mais pas satisfaisant.

Donc je n'ai mis aucune restriction en date et c'est en VB que j'affiche juste la semaine qui m'interresse.

merci

@+

Metalcoder
0
Rejoignez-nous