begin process at 2012 05 26 08:51:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

Autre

 > 

Requêtes

 > 

Aide sur requete


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Aide sur requete

jeudi 1 février 2007 à 18:47:35 | Aide sur requete

Baguauda

Bonjour à tous.
Pour commencer une brève mise en cituation.
Je dois bidouiller un requetes pour améliorer mes temps de reponses, car je travaille sur Sql Ce et la rapiditer c'est pas ce qu'il y a de mieux.
Donc voila mon problème.
Je suis dans le cadre d'un prise de commande, ma commande contient des lignes et c'est lignes "contiennent" les informations du couple Articles/Tarifs.
Donc 4 tables SalesTable, SalesLine, InventTable, InventPrice (je passe sur les définitions de ces tables cela n'est pas utile).
La où ca rame enormement c'est lorsque que je dois affiché la liste des lignes déjà saisie.
Voici comment je procédait jusqu'a présent (c'est pas brillant je vous l'accorde mais je ne vais pas non plus m'étaller sur le comment du pourquoi j'en suis arrivé la ).

Je commencais pas faire une première requêtes pour recupèrer mes lignes de commande
Select * from Salesline where fkSalesTable = ....

La où pour moi cela se complique c'est que pour récupèrer les informations Articles Tarifs j'ai déjà une requête un peu particulière(pas tant que ca je vous l'accorde).
Select * from InventTable a, InventPrice b where a.ItemId = b.ItemId and ((b.PriceGroup = ...) or b.PriceGroup = null)) order by b.priceGroup.
Donc cette requête me retourne généralement plusieur lignes mais je pend uniquement la première ligne.

Vous comprenez bien que niveau optimisation il existe certainement mieux que:
je rechercher toutes mes lignes et pour chacune de mes lignes je vais rechercher le couple Article/Tarifs correspondant.

J'ai bo chercher dans tous les sens mes compétence en SQL sont trop faible pour resoudre le problème tout seul.
Je m'en remet donc a vous.

Merci d'avance
Baguauda





jeudi 1 février 2007 à 22:22:04 | Re : Aide sur requete

nhervagault

Administrateur CodeS-SourceS
Salut

Pas facile de comprendre ton message


select * from Salesline
inner join
InventTable on InventTable .id = Salesline.idproduit
inner join
InventPrice on InventPrice .id = Salesline.idprix

dois donner le bon resultat.

attention il faut virer l'étoile pour des raison d'optimisation car, cela permet de filtrer des colonnes renvoyées par la requête. Donc moi de mémoire consommée dans le résultat et plus de rapidité.

Ensuite il faut bien positionnes les clauses du where pour filtrer le nombre de lignes remontées car ici cette requete doit de renvoyée autant de lignes que de lignes dans ta table seleslines.
Si les contraintes intégrité référentielles sont respectées sur ta base.


Bon courage et espérant avoir compris ta question.


jeudi 1 février 2007 à 22:51:25 | Re : Aide sur requete

Baguauda

Tout d'abord Merci et desoler pour mon manque d'explication.
Je ne sais pas encore si la solution est la bonne je testerais demain, et sinon ta reponse m'a permit de m'ouvrir les yeux et de trouver une probable solution.
j'ai mis les * car je suis un peu faignant, et puis ya pas mal de colones.

Tant que nous sommes dans les questions optimisation:
qu'est ce qui est plus rapide
Select * from maTable1 a, maTable2 b where a.Col = b.col and a.col = 'Tartanpion'
Select * from maTable1 a
     Inner (ou autre jointure) JOIN maTable2 b ON a.col = b.col
    where a.col = 'Tartanpion'

merci
jeudi 1 février 2007 à 23:24:00 | Re : Aide sur requete

nhervagault

Administrateur CodeS-SourceS
Réponse acceptée !
Salut

La premiere solution est plus claire
à relire pour moi

Le inner join est une jointure ce que l'on veut
alors que le where est un produit cartesien

Les optimiseur ce base sur les inner joins pour faire les jointures
et pas sur les wheres qui eux servent de filtre.

Tu peux voir les différents dans l'analyseur de sqlserveur,
si tu utilises ce logiciel.


Pour info, il y a un petit cours sur l'optimisation ici :
http://sqlpro.developpez.com/cours/optimiser/

http://www.sql-server-performance.com/tuning_joins.asp
Désolé le texte est en anglais pour le dernier.

Mais le texte est clair, il faut mieux utiliser le INNER JOIN
car le where --> CROSS JOIN et il y a besoin d'utiliser la plupart du temps un distinct pour filtrer les données.


Plus précisement

 Table A

ACOL1 ACOL2
A1 AA1
A2 AA2
A3 AA3

Table B

BCOL1 BCOL2
A1
BB1
A2 BB2


SELECT * FROM A CROSS JOIN B
OU
 SELECT * FROM A, B


ACOL1 ACOL2 BCOL1 BCOL2
A1 AA1 A1 BB1
A1 AA1 A2 BB2
A2 AA2 A1 BB1
A2 AA2 A2 BB2
A3 AA3 A1 BB1
A3 AA3 A2 BB2

Puis apres on applique le WHERE ACOL1 = BCOL1
On a

ACOL1 ACOL2 BCOL1 BCOL2
A1 AA1 A1 BB1
A2 AA2 A2 BB2


Donc on est passé par un calcul avec 6 lignes pour en obtenir 2
que du gachis.

Peut être que les index et les optimiseurs des SGBD améliore un peu et détecte ce
type de problème.

Mais plus le travail est maché pour eux, mieux c'est.

Bon SQL


vendredi 2 février 2007 à 00:18:37 | Re : Aide sur requete

Baguauda

ok merci pour ces explications. Je pense que je vais utiliser la technique que tu préconise, car je travaille la base Sql Ce pour pocket PC et elle est  loin d'être aussi optimisé qu'un Sql Server.
Encore Merci


Cette discussion est classée dans : aide, lignes, requete, tarifs, pricegroup


Répondre à ce message

Sujets en rapport avec ce message

aide pour une requete [ par enrageur ] Voila je programme sous un systeme d'explotation qui ressembe a UNIX et sous Oracle. quand je tappe une requete du type :SELECT * FROM TOTO;tous le fi Inserer plusieurs lignes en une seule requete ?! [ par greg63 ] Salut a tout l'monde, j'ai un petit souci avec une base access en C# : je souhaite faire plusieurs INSERT a la suite, mais j'aimerais avoir a faire le Aide pour requete sql [ par ascore31 ] Bonjour, j'ai créé un formulaire HTML comprenant 20 questions. Quatre possibilités de réponses sont possibles (Tres satisfait,satisfait,moyen,mauvais Demande aide sur une requete [ par winzo ] Bonjour à tous,J'ai besoin d'aide sur une requete !!Je dois faire la somme des quantités consommées par mois et par années pour chaque articleJ'accède Besoin d'aide pour une requete [ par ranouf ] Bonjour,Je me demande si c'est possible de résoudre ce problème par une requete :Imaginez un cube de 5*5*5 cases.Dans ce cube 2 cases appartiennent à Aide sur requete [ par romainbisson ] Salut,Je voudrais avoir une requete qui va lire dans une table, puis va lire dans une autre table et compare ces deux lecture et affiche le resultat.. besoin d'aide pour une requete sql [ par elfifie ] J'ai une table Facture qui contient les champs ID_Facture et Montant.Une autre table Achat qui contient les champs Nom et ID_Facture.Sachant que chaqu J'ai besoin d'AIDE sur cette requete [ par elgafsi86 ] salut tout le monde j'ai une requete qui m'ennui bcp J'ai 2 tableaux: -personnel:BD des personnels d'une entreprise -participa Aide pour requete sql upadate avec access 0.7 [ par stefoulefou ] Bonjour, J'aimerai de l'aide pour faire une requête SQL avec access 0.7 J'ai une table 1 qui a une colonne avec des caractères. Mais beaucoup d'enreg Passer de colonnes à lignes [ par Fianchetto ] Bonjour à tous, je suis sur une requete qui me pose des problèmes depuis quelques temps que je soumet à votre sagacité. Pour faire simple, j'ai une pr


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales