Bonjour,
Toujours dans le cadre de mon autoformation à sql, je me pose une nouvelle question.
J'ai lu par ici et là qu'il était (souvent) préférable d'utiliser un inner join plutôt qu'un left join.
Peut-être ... mais j'aimerai comprendre pourquoi. D'après ce que j'ai lu, left join "impose" le parcours initial sur la table gauche alors que l'inner join choisi la table la plus petite.
Sûrement ... mais qu'entend t-on par la table plus petite ??? NB de rows total, nb de rows après clause where, taille de la table, .... ?
Dans mon cas d'emploi, j'ai
- une table Rencontre qui pointe vers une table inscription (1 rencontre => 1 à n inscription)
- La table Rencontre comporte beaucoup de colonnes
- La table Inscription ne comporte que 4 colonnes (Son Id, l'Id de la rencontre, la date de la rencontre, et l'id de l'utilisateur inscrit.
J'aurai donc quand même choisi un left join en partant sur la table Inscription pour limiter au max les accès
Ais-je raison ?
Autre question sur un autre sujet :
Certains se poseraient sûrement pourquoi j'ai dupliqué ma colonne "Date de Rencontre" dans ma table Inscription alors qu'elle ne devrait logiquement n'être QUE dans la table Rencontre.
Je réponds (Mais est-ce une connerie ?) que sur la logique métier, bon nombre de filtres (mais pas tous) sont liés à la date de la rencontre ET l'inscription. Afin d'optimiser les accès disques lors des requêtes, je me suis dit que c'était peut être intéressant même si conceptuellement c'est débile.
Si c'est réellement débile, comment vous, les experts, vous optimiseriez ce cas ?
Merci d'avance pour votre retour.
Soyez indulgents... je débute
==== EDIT ====
Faudrait-il modifier la structure pour faire une table RencontreDate (Id et Date de rencontre) et placer les reste des colonnes dans Rencontre
RencontreDate => [1,1] Rencontre
RencontreDate => [1,n] inscriptions
Partager