Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Optimisation of SQL code in query

8 réponses
Avatar
Robert
Hello
I tried to optimisate sql code, seems to work but if i use sql as shown
below i have no results; If i change the % in LIKE into * the query will take
up to 20 min to execute. AMS_HMT contains a lot of data. Thanks for your help.

SELECT A.NPTF,
A.NRUBR,
A.NSUFF,
A.DJOURNAL,
A.DOPER,
A.DVALEUR,
A.NEXT,
A.CMON,
A.MONTANT,
A.CSENS,
A.NECRITUR,
B.CPDC
FROM AMS_HMT A INNER JOIN qry_OptFut_MF_Loads_05 B ON ((A.NPTF = B.NPTF) AND
(A.NRUBR = B.Realized_Acct) AND
(A.NSUFF = B.Realized_AcctSfx) AND
(A.NEXT>B.NEXT))
WHERE ((A.CSERVICE LIKE '%') AND
(A.NPTF LIKE '%') AND
(A.NECRITUR LIKE '%'))
ORDER BY A.NPTF, A.NRUBR;

8 réponses

Avatar
3stone
Hi Robert,

This is a *French* Access newsgroup ;-))

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)



"Robert" a écrit dans le message de news:

| Hello
| I tried to optimisate sql code, seems to work but if i use sql as shown
| below i have no results; If i change the % in LIKE into * the query will take
| up to 20 min to execute. AMS_HMT contains a lot of data. Thanks for your help.
|
| SELECT A.NPTF,
| A.NRUBR,
| A.NSUFF,
| A.DJOURNAL,
| A.DOPER,
| A.DVALEUR,
| A.NEXT,
| A.CMON,
| A.MONTANT,
| A.CSENS,
| A.NECRITUR,
| B.CPDC
| FROM AMS_HMT A INNER JOIN qry_OptFut_MF_Loads_05 B ON ((A.NPTF = B.NPTF) AND
| (A.NRUBR = B.Realized_Acct) AND
| (A.NSUFF = B.Realized_AcctSfx) AND
| (A.NEXT>B.NEXT))
| WHERE ((A.CSERVICE LIKE '%') AND
| (A.NPTF LIKE '%') AND
| (A.NECRITUR LIKE '%'))
| ORDER BY A.NPTF, A.NRUBR;
|
|
Avatar
Robert
Salut 3stone

T'es un petit marrant toi :-))
Je mets 1 phrase en anglais et hop personne ne comprend ... et dire que tous
ces programmeurs font de l'angalis technique ... ou alors vous programmez en
français (mis à part WINDEV) ... Soit
:-)


J'essaie d'optimiser un code SQL dans une Query (requête en bon français).
Dans le code je fais appel à une table reliée (Oracle : AMS_HMT) qui contient
un grand nombre d'enregistrements (plusieurs millions). Le Hic c'est que ma
requête prends +- 20 min à s'exécuter, même en passant par les index oracle.
En fait dès que je touche au champ NPTF et que je mets * à la place de %
c'est parti pour une pause café. Mais sous Access je suis obligé de mettre *
à la place de %. Qn a t il une idée comment je pourrai augmenter la
performance de cette SQL.

Merci


"3stone" a écrit :

Hi Robert,

This is a *French* Access newsgroup ;-))

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)



"Robert" a écrit dans le message de news:

| Hello
| I tried to optimisate sql code, seems to work but if i use sql as shown
| below i have no results; If i change the % in LIKE into * the query will take
| up to 20 min to execute. AMS_HMT contains a lot of data. Thanks for your help.
|
| SELECT A.NPTF,
| A.NRUBR,
| A.NSUFF,
| A.DJOURNAL,
| A.DOPER,
| A.DVALEUR,
| A.NEXT,
| A.CMON,
| A.MONTANT,
| A.CSENS,
| A.NECRITUR,
| B.CPDC
| FROM AMS_HMT A INNER JOIN qry_OptFut_MF_Loads_05 B ON ((A.NPTF = B.NPTF) AND
| (A.NRUBR = B.Realized_Acct) AND
| (A.NSUFF = B.Realized_AcctSfx) AND
| (A.NEXT>B.NEXT))
| WHERE ((A.CSERVICE LIKE '%') AND
| (A.NPTF LIKE '%') AND
| (A.NECRITUR LIKE '%'))
| ORDER BY A.NPTF, A.NRUBR;
|
|




Avatar
Michel__D
Bonjour,

Robert a écrit :
Salut 3stone

T'es un petit marrant toi :-))
Je mets 1 phrase en anglais et hop personne ne comprend ... et dire que tous
ces programmeurs font de l'angalis technique ... ou alors vous programmez en
français (mis à part WINDEV) ... Soit




Mon anglais étant trés moyen, c'est pour cela que je n'ai pas répondu, déja
que parfois il faut faire un effort pour interpréter la question pour pouvoir
comprendre alors si en plus il faut être multilingue.


J'essaie d'optimiser un code SQL dans une Query (requête en bon français).
Dans le code je fais appel à une table reliée (Oracle : AMS_HMT) qui contient
un grand nombre d'enregistrements (plusieurs millions). Le Hic c'est que ma
requête prends +- 20 min à s'exécuter, même en passant par les index oracle.
En fait dès que je touche au champ NPTF et que je mets * à la place de %
c'est parti pour une pause café. Mais sous Access je suis obligé de mettre *
à la place de %. Qn a t il une idée comment je pourrai augmenter la
performance de cette SQL.




La question que je me pose c'est pourquoi mettre Like '*' puisque cela revient
à considérer tout les enregistrements ?

En gros si tu pouvais expliquer ce que tu cherche à faire avec cette requête ?


"3stone" a écrit :

Hi Robert,

This is a *French* Access newsgroup ;-))

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)



"Robert" a écrit dans le message de news:

| Hello
| I tried to optimisate sql code, seems to work but if i use sql as shown
| below i have no results; If i change the % in LIKE into * the query will take
| up to 20 min to execute. AMS_HMT contains a lot of data. Thanks for your help.
|
| SELECT A.NPTF,
| A.NRUBR,
| A.NSUFF,
| A.DJOURNAL,
| A.DOPER,
| A.DVALEUR,
| A.NEXT,
| A.CMON,
| A.MONTANT,
| A.CSENS,
| A.NECRITUR,
| B.CPDC
| FROM AMS_HMT A INNER JOIN qry_OptFut_MF_Loads_05 B ON ((A.NPTF = B.NPTF) AND
| (A.NRUBR = B.Realized_Acct) AND
| (A.NSUFF = B.Realized_AcctSfx) AND
| (A.NEXT>B.NEXT))
| WHERE ((A.CSERVICE LIKE '%') AND
| (A.NPTF LIKE '%') AND
| (A.NECRITUR LIKE '%'))
| ORDER BY A.NPTF, A.NRUBR;
|
|






Avatar
Robert
bonjour

En fait je veux passer par les index de la table oracle, on m'a dit qu'il
fallait appeler les champs de l'index 1 par 1 et dans l'ordre d'où le

>> | WHERE ((A.CSERVICE LIKE '%') AND
>> | (A.NPTF LIKE '%') AND
>> | (A.NECRITUR LIKE '%'))



mon index se compose de ces 3 champs

Bonne journée

"Michel__D" a écrit :

Bonjour,

Robert a écrit :
> Salut 3stone
>
> T'es un petit marrant toi :-))
> Je mets 1 phrase en anglais et hop personne ne comprend ... et dire que tous
> ces programmeurs font de l'angalis technique ... ou alors vous programmez en
> français (mis à part WINDEV) ... Soit


Mon anglais étant trés moyen, c'est pour cela que je n'ai pas répondu, déja
que parfois il faut faire un effort pour interpréter la question pour pouvoir
comprendre alors si en plus il faut être multilingue.


> J'essaie d'optimiser un code SQL dans une Query (requête en bon français).
> Dans le code je fais appel à une table reliée (Oracle : AMS_HMT) qui contient
> un grand nombre d'enregistrements (plusieurs millions). Le Hic c'est que ma
> requête prends +- 20 min à s'exécuter, même en passant par les index oracle.
> En fait dès que je touche au champ NPTF et que je mets * à la place de %
> c'est parti pour une pause café. Mais sous Access je suis obligé de mettre *
> à la place de %. Qn a t il une idée comment je pourrai augmenter la
> performance de cette SQL.


La question que je me pose c'est pourquoi mettre Like '*' puisque cela revient
à considérer tout les enregistrements ?

En gros si tu pouvais expliquer ce que tu cherche à faire avec cette requête ?


> "3stone" a écrit :
>
>> Hi Robert,
>>
>> This is a *French* Access newsgroup ;-))
>>
>> --
>> A+
>> Pierre (3stone) Access MVP
>> Perso: http://www.3stone.be/
>> MPFA: http://www.mpfa.info/ (infos générales)
>>
>>
>>
>> "Robert" a écrit dans le message de news:
>>
>> | Hello
>> | I tried to optimisate sql code, seems to work but if i use sql as shown
>> | below i have no results; If i change the % in LIKE into * the query will take
>> | up to 20 min to execute. AMS_HMT contains a lot of data. Thanks for your help.
>> |
>> | SELECT A.NPTF,
>> | A.NRUBR,
>> | A.NSUFF,
>> | A.DJOURNAL,
>> | A.DOPER,
>> | A.DVALEUR,
>> | A.NEXT,
>> | A.CMON,
>> | A.MONTANT,
>> | A.CSENS,
>> | A.NECRITUR,
>> | B.CPDC
>> | FROM AMS_HMT A INNER JOIN qry_OptFut_MF_Loads_05 B ON ((A.NPTF = B.NPTF) AND
>> | (A.NRUBR = B.Realized_Acct) AND
>> | (A.NSUFF = B.Realized_AcctSfx) AND
>> | (A.NEXT>B.NEXT))
>> | WHERE ((A.CSERVICE LIKE '%') AND
>> | (A.NPTF LIKE '%') AND
>> | (A.NECRITUR LIKE '%'))
>> | ORDER BY A.NPTF, A.NRUBR;
>> |
>> |
>>
>>



Avatar
Michel__D
Hum, je ne comprend pas trop l'intérét de rajouter ces conditions telles
quelles, mais le problème est que veux-tu ramener comme enregistrement ?
car (A.NEXT>B.NEXT) te ramène tout les enregistrements de A (A.NEXT) qui
sont > à (B.NEXT) et ceci pour chaque enregistrement de B qui satisfait les
autres conditions de la jointure.

PS1:Tu as essayé sans le WHERE.

PS2:Ou alors plutot un truc de ce genre (à vérifier) :
WHERE ((A.CSERVICE IS NOT NULL) AND
(A.NPTF IS NOT NULL) AND
(A.NECRITUR IS NOT NULL))

Robert a écrit :
bonjour

En fait je veux passer par les index de la table oracle, on m'a dit qu'il
fallait appeler les champs de l'index 1 par 1 et dans l'ordre d'où le

| WHERE ((A.CSERVICE LIKE '%') AND
| (A.NPTF LIKE '%') AND
| (A.NECRITUR LIKE '%'))







mon index se compose de ces 3 champs

Bonne journée

"Michel__D" a écrit :

Bonjour,

Robert a écrit :
Salut 3stone

T'es un petit marrant toi :-))
Je mets 1 phrase en anglais et hop personne ne comprend ... et dire que tous
ces programmeurs font de l'angalis technique ... ou alors vous programmez en
français (mis à part WINDEV) ... Soit



Mon anglais étant trés moyen, c'est pour cela que je n'ai pas répondu, déja
que parfois il faut faire un effort pour interpréter la question pour pouvoir
comprendre alors si en plus il faut être multilingue.


J'essaie d'optimiser un code SQL dans une Query (requête en bon français).
Dans le code je fais appel à une table reliée (Oracle : AMS_HMT) qui contient
un grand nombre d'enregistrements (plusieurs millions). Le Hic c'est que ma
requête prends +- 20 min à s'exécuter, même en passant par les index oracle.
En fait dès que je touche au champ NPTF et que je mets * à la place de %
c'est parti pour une pause café. Mais sous Access je suis obligé de mettre *
à la place de %. Qn a t il une idée comment je pourrai augmenter la
performance de cette SQL.



La question que je me pose c'est pourquoi mettre Like '*' puisque cela revient
à considérer tout les enregistrements ?

En gros si tu pouvais expliquer ce que tu cherche à faire avec cette requête ?


"3stone" a écrit :

Hi Robert,

This is a *French* Access newsgroup ;-))

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)



"Robert" a écrit dans le message de news:

| Hello
| I tried to optimisate sql code, seems to work but if i use sql as shown
| below i have no results; If i change the % in LIKE into * the query will take
| up to 20 min to execute. AMS_HMT contains a lot of data. Thanks for your help.
|
| SELECT A.NPTF,
| A.NRUBR,
| A.NSUFF,
| A.DJOURNAL,
| A.DOPER,
| A.DVALEUR,
| A.NEXT,
| A.CMON,
| A.MONTANT,
| A.CSENS,
| A.NECRITUR,
| B.CPDC
| FROM AMS_HMT A INNER JOIN qry_OptFut_MF_Loads_05 B ON ((A.NPTF = B.NPTF) AND
| (A.NRUBR = B.Realized_Acct) AND
| (A.NSUFF = B.Realized_AcctSfx) AND
| (A.NEXT>B.NEXT))
| WHERE ((A.CSERVICE LIKE '%') AND
| (A.NPTF LIKE '%') AND
| (A.NECRITUR LIKE '%'))
| ORDER BY A.NPTF, A.NRUBR;
|
|










Avatar
Dragan
Bonjour Robert, as-tu essayé sans la clause WHERE ?

"Robert" a écrit :

bonjour

En fait je veux passer par les index de la table oracle, on m'a dit qu'il
fallait appeler les champs de l'index 1 par 1 et dans l'ordre d'où le

> >> | WHERE ((A.CSERVICE LIKE '%') AND
> >> | (A.NPTF LIKE '%') AND
> >> | (A.NECRITUR LIKE '%'))

mon index se compose de ces 3 champs

Bonne journée

"Michel__D" a écrit :

> Bonjour,
>
> Robert a écrit :
> > Salut 3stone
> >
> > T'es un petit marrant toi :-))
> > Je mets 1 phrase en anglais et hop personne ne comprend ... et dire que tous
> > ces programmeurs font de l'angalis technique ... ou alors vous programmez en
> > français (mis à part WINDEV) ... Soit
>
>
> Mon anglais étant trés moyen, c'est pour cela que je n'ai pas répondu, déja
> que parfois il faut faire un effort pour interpréter la question pour pouvoir
> comprendre alors si en plus il faut être multilingue.
>
>
> > J'essaie d'optimiser un code SQL dans une Query (requête en bon français).
> > Dans le code je fais appel à une table reliée (Oracle : AMS_HMT) qui contient
> > un grand nombre d'enregistrements (plusieurs millions). Le Hic c'est que ma
> > requête prends +- 20 min à s'exécuter, même en passant par les index oracle.
> > En fait dès que je touche au champ NPTF et que je mets * à la place de %
> > c'est parti pour une pause café. Mais sous Access je suis obligé de mettre *
> > à la place de %. Qn a t il une idée comment je pourrai augmenter la
> > performance de cette SQL.
>
>
> La question que je me pose c'est pourquoi mettre Like '*' puisque cela revient
> à considérer tout les enregistrements ?
>
> En gros si tu pouvais expliquer ce que tu cherche à faire avec cette requête ?
>
>
> > "3stone" a écrit :
> >
> >> Hi Robert,
> >>
> >> This is a *French* Access newsgroup ;-))
> >>
> >> --
> >> A+
> >> Pierre (3stone) Access MVP
> >> Perso: http://www.3stone.be/
> >> MPFA: http://www.mpfa.info/ (infos générales)
> >>
> >>
> >>
> >> "Robert" a écrit dans le message de news:
> >>
> >> | Hello
> >> | I tried to optimisate sql code, seems to work but if i use sql as shown
> >> | below i have no results; If i change the % in LIKE into * the query will take
> >> | up to 20 min to execute. AMS_HMT contains a lot of data. Thanks for your help.
> >> |
> >> | SELECT A.NPTF,
> >> | A.NRUBR,
> >> | A.NSUFF,
> >> | A.DJOURNAL,
> >> | A.DOPER,
> >> | A.DVALEUR,
> >> | A.NEXT,
> >> | A.CMON,
> >> | A.MONTANT,
> >> | A.CSENS,
> >> | A.NECRITUR,
> >> | B.CPDC
> >> | FROM AMS_HMT A INNER JOIN qry_OptFut_MF_Loads_05 B ON ((A.NPTF = B.NPTF) AND
> >> | (A.NRUBR = B.Realized_Acct) AND
> >> | (A.NSUFF = B.Realized_AcctSfx) AND
> >> | (A.NEXT>B.NEXT))
> >> | WHERE ((A.CSERVICE LIKE '%') AND
> >> | (A.NPTF LIKE '%') AND
> >> | (A.NECRITUR LIKE '%'))
> >> | ORDER BY A.NPTF, A.NRUBR;
> >> |
> >> |
> >>
> >>
>


Avatar
3stone
Salut,

"Robert"
| T'es un petit marrant toi :-))


Ben, heureusement, il y toi ;-)


| Je mets 1 phrase en anglais et hop personne ne comprend ... et dire que tous
| ces programmeurs font de l'angalis technique ... ou alors vous programmez en
| français (mis à part WINDEV) ... Soit

Détrompe toi...

Ce newsgroup FR existe justement parce que ce n'est pas comme tu dis!
Ici, il y a aussi (je serais tenté de dire: principalement) le/la secrétaire qui
essaie de faire un maximum pour se facilité le travail, ou tout simplement
celui ou celle qui arrive au bout de sa "base" de données faite sur Excel et
qui tente de passer à Access. Ces personnes ont autant de difficultés avec
le VBA qu'avec l'anglais.

Et surtout, un newsgroup n'est pas un service après vente, mais un lieu de
partage... ce qui demande à l'évidence que tout le monde puisse suivre
les conversations (dans la langue du NG).

PS:
Si tu souhaites entretenir ton anglais, il y a le NG anglais juste à coté
news://msnews.microsoft.com/microsoft.public.access

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
jerome crevecoeur
Bonjour,

Un bon index serait sur le champ NEXT puisqu'il semble le plus couteux !

Cordialement


Robert a écrit :
bonjour

En fait je veux passer par les index de la table oracle, on m'a dit qu' il
fallait appeler les champs de l'index 1 par 1 et dans l'ordre d'où le

| WHERE ((A.CSERVICE LIKE '%') AND
| (A.NPTF LIKE '%') AND
| (A.NECRITUR LIKE '%'))







mon index se compose de ces 3 champs

Bonne journée

"Michel__D" a écrit :

Bonjour,

Robert a écrit :
Salut 3stone

T'es un petit marrant toi :-))
Je mets 1 phrase en anglais et hop personne ne comprend ... et dire q ue tous
ces programmeurs font de l'angalis technique ... ou alors vous progra mmez en
français (mis à part WINDEV) ... Soit



Mon anglais étant trés moyen, c'est pour cela que je n'ai pas ré pondu, déja
que parfois il faut faire un effort pour interpréter la question p our pouvoir
comprendre alors si en plus il faut être multilingue.


J'essaie d'optimiser un code SQL dans une Query (requête en bon fra nçais).
Dans le code je fais appel à une table reliée (Oracle : AMS_HMT) qui contient
un grand nombre d'enregistrements (plusieurs millions). Le Hic c'est que ma
requête prends +- 20 min à s'exécuter, même en passant par l es index oracle.
En fait dès que je touche au champ NPTF et que je mets * à la pla ce de %
c'est parti pour une pause café. Mais sous Access je suis obligé de mettre *
à la place de %. Qn a t il une idée comment je pourrai augmenter la
performance de cette SQL.



La question que je me pose c'est pourquoi mettre Like '*' puisque cela revient
à considérer tout les enregistrements ?

En gros si tu pouvais expliquer ce que tu cherche à faire avec cette requête ?


"3stone" a écrit :

Hi Robert,

This is a *French* Access newsgroup ;-))

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)



"Robert" a écrit dans le messag e de news:

| Hello
| I tried to optimisate sql code, seems to work but if i use sql as shown
| below i have no results; If i change the % in LIKE into * the quer y will take
| up to 20 min to execute. AMS_HMT contains a lot of data. Thanks fo r your help.
|
| SELECT A.NPTF,
| A.NRUBR,
| A.NSUFF,
| A.DJOURNAL,
| A.DOPER,
| A.DVALEUR,
| A.NEXT,
| A.CMON,
| A.MONTANT,
| A.CSENS,
| A.NECRITUR,
| B.CPDC
| FROM AMS_HMT A INNER JOIN qry_OptFut_MF_Loads_05 B ON ((A.NPTF = B.NPTF) AND
| (A.NRUBR = B.Realized_Acct) AND
| (A.NSUFF = B.Realized_AcctSfx) AND
| (A.NEXT>B.NEXT))
| WHERE ((A.CSERVICE LIKE '%') AND
| (A.NPTF LIKE '%') AND
| (A.NECRITUR LIKE '%'))
| ORDER BY A.NPTF, A.NRUBR;
|
|