OVH Cloud OVH Cloud

Sous requête suite...

3 réponses
Avatar
Richard Martin
Bonjour à tous et toutes.

J'ai une table T-1997 et T-PROMPRODUIT. Il y a possibilité de relation
plusieurs à plusieurs entre les 2 sur le champs COMPAGNIE et le champ
PRODUIT. La première table a 100 000 enregistrements et la seconde 20000.
Les 2 tables ont un index avec doublons sur la COMPAGNIE et SUR LE PRODUIT.

Je demande un regroupement par COMPAGNIE, PRODUIT, DESCRIPTION et TYPE et
pour la DATE je choisi MIN comme opération. Cela me donne un seul
enregistrement par COMPAGNIE, PRODUIT, DESCIPTION et TYPE qui me servira
comme source d'une autre requête plus tard.

Dans les critères, je demande la COMPAGNIE 01 et dans le champs PRODUIT j'ai
le critère suivant :

Pas In (select PRODUIT from PRO_D_TRANS_PROD where compagnie='01' and
TYPE_TRANSACT= 'SFICTR')

Ce dernier critère qui est un SELECT rallenti pas mal le traitement. C'est
terriblement long. Je n'ai jamais attendu au complet. Est-ce que dans mon
SELECT il faut que j'ajoute une commande faisant référence à un Index ?

Sinon j'ai 100000 enregistrements qui se compare tous aux 20000 avec un
SELECT en critère pour le produit. Sans ce SELECT c'est rapide mais j'en ai
besoin pour obtenir ce que je veux. J'ai tester avec peu de données et ça
fonctionne.

Quelqu'un a des suggestions s.v.p. ?

Merci et bonne fin de semaine !

Richard Martin.

3 réponses

Avatar
3stone
Salut,

"Richard Martin"
| J'ai une table T-1997 et T-PROMPRODUIT. Il y a possibilité de relation
| plusieurs à plusieurs entre les 2 sur le champs COMPAGNIE et le champ
| PRODUIT. La première table a 100 000 enregistrements et la seconde 20000.
| Les 2 tables ont un index avec doublons sur la COMPAGNIE et SUR LE PRODUIT.
|
| Je demande un regroupement par COMPAGNIE, PRODUIT, DESCRIPTION et TYPE et
| pour la DATE je choisi MIN comme opération. Cela me donne un seul
| enregistrement par COMPAGNIE, PRODUIT, DESCIPTION et TYPE qui me servira
| comme source d'une autre requête plus tard.
|
| Dans les critères, je demande la COMPAGNIE 01 et dans le champs PRODUIT j'ai
| le critère suivant :
|
| Pas In (select PRODUIT from PRO_D_TRANS_PROD where compagnie='01' and
| TYPE_TRANSACT= 'SFICTR')
|
| Ce dernier critère qui est un SELECT rallenti pas mal le traitement. C'est
| terriblement long. Je n'ai jamais attendu au complet. Est-ce que dans mon
| SELECT il faut que j'ajoute une commande faisant référence à un Index ?
|
| Sinon j'ai 100000 enregistrements qui se compare tous aux 20000 avec un
| SELECT en critère pour le produit. Sans ce SELECT c'est rapide mais j'en ai
| besoin pour obtenir ce que je veux. J'ai tester avec peu de données et ça
| fonctionne.


Le problème est le Not In...

Indexer Produit et éventuellement Compagnie et Type_Transact améliorera
peut-être la situation.


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Avatar
Eric
Bonsoir,

Ne pourrais-tu pas éviter le Not In (Select ...) en faisant une jointure
externe du genre :

1ere partie du Select (à adapter bien sur)
Select P.Produit, ... From LaTable... As P

puis pour éviter le Not In(...), remplacer par :

Left Join (select PRODUIT from PRO_D_TRANS_PROD where compagnie='01' and
TYPE_TRANSACT= 'SFICTR') as T
ON P.Produit = T.Produit
WHERE IsNull(T.Produit);

?



Bonjour à tous et toutes.

J'ai une table T-1997 et T-PROMPRODUIT. Il y a possibilité de relation
plusieurs à plusieurs entre les 2 sur le champs COMPAGNIE et le champ
PRODUIT. La première table a 100 000 enregistrements et la seconde 20000.
Les 2 tables ont un index avec doublons sur la COMPAGNIE et SUR LE PRODUIT.

Je demande un regroupement par COMPAGNIE, PRODUIT, DESCRIPTION et TYPE et
pour la DATE je choisi MIN comme opération. Cela me donne un seul
enregistrement par COMPAGNIE, PRODUIT, DESCIPTION et TYPE qui me servira
comme source d'une autre requête plus tard.

Dans les critères, je demande la COMPAGNIE 01 et dans le champs PRODUIT j'ai
le critère suivant :

Pas In (select PRODUIT from PRO_D_TRANS_PROD where compagnie='01' and
TYPE_TRANSACT= 'SFICTR')

Ce dernier critère qui est un SELECT rallenti pas mal le traitement. C'est
terriblement long. Je n'ai jamais attendu au complet. Est-ce que dans mon
SELECT il faut que j'ajoute une commande faisant référence à un Index ?

Sinon j'ai 100000 enregistrements qui se compare tous aux 20000 avec un
SELECT en critère pour le produit. Sans ce SELECT c'est rapide mais j'en ai
besoin pour obtenir ce que je veux. J'ai tester avec peu de données et ça
fonctionne.

Quelqu'un a des suggestions s.v.p. ?

Merci et bonne fin de semaine !

Richard Martin.




--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Richard Martin
Merci à vous deux, je vais faire des tests là-dessus.

Richard

"Eric" a écrit dans le message de news:
%23L%
Bonsoir,

Ne pourrais-tu pas éviter le Not In (Select ...) en faisant une jointure
externe du genre :

1ere partie du Select (à adapter bien sur)
Select P.Produit, ... From LaTable... As P

puis pour éviter le Not In(...), remplacer par :

Left Join (select PRODUIT from PRO_D_TRANS_PROD where compagnie='01' and
TYPE_TRANSACT= 'SFICTR') as T
ON P.Produit = T.Produit
WHERE IsNull(T.Produit);

?



Bonjour à tous et toutes.

J'ai une table T-1997 et T-PROMPRODUIT. Il y a possibilité de relation
plusieurs à plusieurs entre les 2 sur le champs COMPAGNIE et le champ
PRODUIT. La première table a 100 000 enregistrements et la seconde
20000. Les 2 tables ont un index avec doublons sur la COMPAGNIE et SUR LE
PRODUIT.

Je demande un regroupement par COMPAGNIE, PRODUIT, DESCRIPTION et TYPE et
pour la DATE je choisi MIN comme opération. Cela me donne un seul
enregistrement par COMPAGNIE, PRODUIT, DESCIPTION et TYPE qui me servira
comme source d'une autre requête plus tard.

Dans les critères, je demande la COMPAGNIE 01 et dans le champs PRODUIT
j'ai le critère suivant :

Pas In (select PRODUIT from PRO_D_TRANS_PROD where compagnie='01' and
TYPE_TRANSACT= 'SFICTR')

Ce dernier critère qui est un SELECT rallenti pas mal le traitement.
C'est terriblement long. Je n'ai jamais attendu au complet. Est-ce que
dans mon SELECT il faut que j'ajoute une commande faisant référence à un
Index ?

Sinon j'ai 100000 enregistrements qui se compare tous aux 20000 avec un
SELECT en critère pour le produit. Sans ce SELECT c'est rapide mais j'en
ai besoin pour obtenir ce que je veux. J'ai tester avec peu de données
et ça fonctionne.

Quelqu'un a des suggestions s.v.p. ?

Merci et bonne fin de semaine !

Richard Martin.


--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr