Acomba (Forum)
Pourquoi ne pas devenir membre du forum ?

Identifiez-vous ou Inscrivez-vous afin d'accéder à l'inrégralité du forum:
Accès à toutes les catégories du forum,
Entraide entre les 6 500 membres, et ce nombre s'accroît quotidiennement!

Notez que ce forum est indépendant de la société Acceo Solutions, éditrice du logiciel Acomba.
Connexion

Récupérer mon mot de passe


ODBC - SQL - Analyse des ventes - Problème de performances

Voir le sujet précédent Voir le sujet suivant Aller en bas

ODBC - SQL - Analyse des ventes - Problème de performances

Message  simonlabdes le Mer 25 Mai 2011 - 10:46

(je viens d'envoyer le email à ODBC Acomba, mais je m'essaye ici aussi pour notre bien à tous....)

La situation
Lorsque j’exécute la requête [que j’ai simplifié] suivante (ramener les total des ventes par Client/Produit pour une période donnée):
Code:
select   Invoicing.InCustomerSupplierNumber,
      Product.PrNumber,
      Product.PrDescription1,
      sum(IlInvoicedQty) as QteVendue,
      sum(IlInvoicedQty * IlCost) as CoutantTotalReel,
      sum(IlInvoicedQty * IlSellingPrice) as VendantTotalReel
from { OJ Invoicing
      inner join InvoicingLine
      inner join Product
       on InvoicingLine.IlProductCP = Product.RecCardPos
       on InvoicingLine.IlInvoicingCP = Invoicing.RecCardPos
      }
Where InDate = {d '2010-01-05'}
group by Invoicing.InCustomerSupplierNumber,
      Product.PrNumber,
      Product.PrDescription1
J’ai un résultat en moins d’une seconde (sur un disque dur SSD…). Si je change cette date pour le lendemain uniquement, même rapidité : moins d’une seconde…

Problème : Toutefois, si je change le filtre pour avoir plus qu’une seule journée:
Code:
Where InDate between {d '2010-01-05'} and {d '2010-01-06'}
Ou bien
Code:
Where InDate in ({d '2010-01-05'}, {d '2010-01-06'})
Ou bien
Code:
Where InDate >= {d '2010-01-05'} and InDate <= {d '2010-01-06'}
(donc un laps de 2 jours)

Alors la requête prend 600 secondes et plus à revenir!
Note : la table Invoicing contient environ 200K lignes et la Table InvoicingLine environ 1M

Ma question :
Est-ce que je m’y prend de la bonne façon pour ramasser plusieurs jours??

Note 2 : Et je veux éviter de faire de la programamtion (VB, C# et compagnie).

Note 3 : Nous avons développé un système qui "synchronise" Acomba sur un Serveur SQL, mais j'aimerais éviter cette solution pour un simple rapport...

simonlabdes

Nombre de messages : 12
Ville : Bonaventure, Gaspésie
Date d'inscription : 28/03/2011

Voir le profil de l'utilisateur http://www.solutioninfomedia.com

Revenir en haut Aller en bas

Re: ODBC - SQL - Analyse des ventes - Problème de performances

Message  Lartis le Jeu 2 Juin 2011 - 23:30

As-tu essayé
Where (InDate = {d '2010-01-05'}) OR (InDate = {d '2010-01-05'})

J'ai l'impression que c'est une question d'index sur le champ date qui est efficace pour = mais pas avec < et >.

_________________
Sylvain Laurence, partenaire, revendeur et développeur Acomba
Groupe Conseil Lartis Inc. www.lartis.com
avatar
Lartis

Nombre de messages : 640
Ville : Laval
Date d'inscription : 03/04/2007

Fiche d'Entreprise
Nom de l'entreprise: Groupe Conseil Lartis Inc.

Voir le profil de l'utilisateur http://www.lartis.com

Revenir en haut Aller en bas

Re: ODBC - SQL - Analyse des ventes - Problème de performances

Message  Jeremie le Ven 3 Juin 2011 - 10:26

Votre requête semble bonne, mais honnêtement ... faut pas oublier que l"ODBC Acomba est pas super rapide non plus.

Juste pour récupérer un numéro de facture, en local j'ai un délais de 6 secondes.
une fois chez le client, ça grimpe à 3 minutes pour enregistrer une simple facture.

Hier, un de mes clients, mas fait la remarque suivant. "Dans un module qui va dans Acomba, si le bouton enregistrer reste pas enfoncé 3 ou 4 secondes, je me demande toujours si l'enregistrement à bien été faites."

Mais je suis curieux de lire la réponses que vous aurez des gens d'acomba.


@Lartis

En faites, pas vraiment.
Ça pas rapport avec le =, mais plus avec le SUM() et le Group.
Puisqu'il veut avoir le total des factures entre entre deux date pour chaque client et produit.
Acomba doit travailler plus, donc faire travailler le disque dur ...

Je ne crois pas que ça sois l'explication la plus scientifique et je suis peut être dans le champs gauche, mais selon mes observations plus la requête SQL est complexe, plus Acomba à de la misère.

Et cela dépend aussi de la configuration.
Si Acomba est sur une vielle machine, si le serveur est surchargé etc etc etc ...

Remarquez que c'est la même chose avec SQL Serveur, sauf que lui il est plus optimisé.
Et avec 200k d'enregistrement ... même SQL Server travaillerait.
Moins, mais suffisamment pour que cela paraisse.
avatar
Jeremie

Nombre de messages : 108
Date d'inscription : 11/08/2010

Fiche d'Entreprise
Nom de l'entreprise:

Voir le profil de l'utilisateur http://bourgeois-sc.com

Revenir en haut Aller en bas

Re: ODBC - SQL - Analyse des ventes - Problème de performances

Message  simonlabdes le Ven 3 Juin 2011 - 10:38

je ne suis pas ben ben correct! j'ai eu la réponse d'Acomba la semaine dernière en fait et je ne l'ai pas posté..tut tut..!

voici la réponse :
Bonjour M. L’Abbé-Deslauriers,

Nous avons révisé votre requête SQL et voici quelques observations :

• Vous pouvez utilisez la table « TransactionHeaderDetail » ce qui permet d’éliminer une jointure dans votre requête. (Voir exemple ci-bas).
• Lorsque vous voulez filtrer sur les dates, vous devriez toujours utiliser les opérations (i.e. « Where InDate >= {d '2000-01-26'} and InDate <= {d '2000-01-27'} ). Si vous utilisez les commandes « Between » ou « In », ceux-ci augmente le temps d’exécution de la requête

Voici votre requête utilisant la table « TransactionHeaderDetail » :

Select TransactionHeaderDetail.InCustomerSupplierNumber,
Product.PrNumber,
Product.PrDescription1,
sum(IlInvoicedQty) as QteVendue,
sum(IlInvoicedQty * IlCost) as CoutantTotalReel,
sum(IlInvoicedQty * IlSellingPrice) as VendantTotalReel

from { OJ TransactionHeaderDetail
inner join Product
on TransactionHeaderDetail.IlProductCP = Product.RecCardPos
}
Where InDate >= {d '2010-01-05'} and InDate <= {d '2010-01-06'}

group by TransactionHeaderDetail.InCustomerSupplierNumber,
Product.PrNumber,
Product.PrDescription1

Si vous avez d’autres questions, n’hésitez pas à nous écrire de nouveau.

Salutations,

Nous avions déjà remarqué que TransactionHeaderDetail était plus vite que Invoicing et InvoicingLine, mais bon, on se dompte...! j'imagine qu'une requête qui n'a besoin que de l'entête aura avantage à aller dans Invoicing seulement, et si on veut du détail, alors utiliser la genre de vue TransactionHeaderDetail.

Et nous aussi, c'est un peu long créer des factures (3-5 secondes).

simonlabdes

Nombre de messages : 12
Ville : Bonaventure, Gaspésie
Date d'inscription : 28/03/2011

Voir le profil de l'utilisateur http://www.solutioninfomedia.com

Revenir en haut Aller en bas

Re: ODBC - SQL - Analyse des ventes - Problème de performances

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum