bonjour,

Je fais un traitement de jointure en 2 tables , une commande et facture. Une commande n'a qu'une seule facture finale.
La facture contient plusieurs version mais je n'ai besoin que de la dernière (celle pas en etat 'versionning')
J'ai énormément de données "versionning" dans ma table facture.

je voudrais savoir si faire une jointure à 2 critères permet de réduire les ressources de traitement de la requete même si la condition 1 est suffisante.

exemple simplifiée du schéma et des données:

table COMMANDE

com_id com_montant com_ com_facture
-----------------------------------------------------
c1 10 f5
c2 20 f6
c3 30 f7


table FACTURE

fac_id fac_com_id fac_statut
-----------------------------------------------------
f1 null versionning
f2 null versionning
f3 null versionning
f4 null versionning
f5 c1 officielle
f6 c2 officielle
f7 c3 officielle
f8 null versionning
f9 null versionning
f10 null versionning


En gros, est-ce que cette requête R1 est meilleure :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
SELECT * FROM 
commande LEFT JOIN facture ON com_id =fac_com_id

que cette autre requête R2 à deux conditions de jointure gauche :

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
SELECT * FROM 
commande LEFT JOIN facture ON (com_id =fac_com_id AND fac_statut='officielle')


Comme je l'ai dit, la condition com_id =fac_com_id suffit à faire la jointure, mais comme la table externe FACTURE contient bcp de données, je me dis que la filtrer pour la jointure serait une bonne idée, donc en ajoutant AND fac_statut='officielle'

qu'en pensez-vous ?