Jointure avec {node} et performance

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour
J'aimerais juste un conseil
Quand on lit séquentiellement une table (par exemple content_type_aaa) et que l'on fait une jointure avec la table node, y a-t-il une différence de performance si on met la table node à gauche ou à droite?
Donc :
'SELECT * FROM {content_type_pub} p INNER JOIN {node} n ON p.nid = n.nid‘
ou
('SELECT * FROM {node} p INNER JOIN {content_type_pub} n ON p.nid = n.nid‘
C'est du pareil au même?

Je pose la question car je pense qu'il y a souvent des jointures avec node ...

Et en fait dans la table de droite, on prend forcément tous les champs? (alors que dans celui de gauche on peut choisir un ou plusieurs ou tout).

Forum : 
Version de Drupal : 

Fondamentalement c'est pas pareil : le serveur de base de données doit parcourir la première table et faire un index lookup sur l'autre table. Si ces deux tables ont des cardinalités très différentes (mettons: t1 compte 3 lignes, t2 compte 3 millions de lignes), le coût de ces deux requêtes peut être très différent.

Par contre, un INNER JOIN est par définition symétrique. Le planificateur de requêtes du serveur peut donc choisir de commencer la requête par une table ou l'autre. C'est pas toujours très fiable (en particulier si tu ajoutes des ORDER BY là dedans), mais ca marche assez bien dans le cas général.

Donc dans mon exemple
Ce serait mieux de mettre content_type_aaa à gauche (car c'est la plus petite table) et node à droite.
Et de faire un left join pour ne pas donner le choix au planificateur de requêtes.
Merci beaucoup pour ces explications