> Régis Houssin a écrit : > > bonjour, > > > > tout est dans le titre, > > par contre j'ai ajouté une fonction dans la classe product qui vérifie > si le > > produit est utilisé dans une propal, commande, facture ou contrat. > > > > j'ai fait une requête avec des OR car avec des AND il me mettait le > bouton > > si un de ces 4 modules ne contenait pas le produit. > > par contre la requête met un temps fou a s'exécuter. > > > En effet, ta requête est mauvaise. > Si chaque table a une taille de 1000, le temps de traitement sera de > 1000 puissance 4 (produit cartésien de 4 tables sur du fait qu'il n'y a > pas de jointures). > > Pour résoudre cela, il te faut faire 4 requetes. Dans ce cas, le temps > de traitement sera de 4 x 1000 et vu que le champ sur lequel on compte > est indexé, ce sera meme 4x1 (l'index faut passer le cout du full scan > de 1000 à 1*alpha avec alpha tres proche de 1). > > Bref, tes temps auront un indice de perf de presque 4 en faisant 4 > requetes de suite alors qu'ils ont un indice de perf de 1000000000000 > par ta methode (Et je parle pas de la mémoire et swap utilisée...). > Bilan: les 4 requetes sont 150000000000 fois plus rapide que ta requete > unique et meme plus encore si on imageine que les tables ont plus de > lignes. Autant te dire que ce ne passe même pas sur une table de cent > milles lignes de factures, contrats ou autres. > > En résumé: Faire 4 appels et oops, c'est résolu.
Ok j'ai alpha pas tout compris mais je vais diviser en 4 requête au lieu d'une dès que j'aurais le temps. ;-)) Merci Laurent Régis _______________________________________________ Dolibarr-dev mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/dolibarr-dev
