Chargement de données SQL

Une question d'optimisation

a marqué ce sujet comme résolu.
Auteur du sujet

Bonsoir,

J’avais une question sur l’optimisation des requêtes SQL que j’ai dans mon code.
Pour exemple, prenons deux classes Projet et Fichier.

Chaque classe correspond à une table dans la base SQL. Et la classe Projet peut contenir plusieurs Fichier.

Maintenant, lorsque je charge ma classe projet, faut-il que je fasse une jointure pour charger les fichiers ? Sachant que je n’aurai pas toujours besoin des fichiers.

Dans la question est, faut-il mieux faire une requête qui charge le tout à chaque fois (Avec des jointures) ou faire plusieurs requête quand cela s’avère nécessaire ?

En vous remerciant.

Édité par WinXaito

+0 -0

Ni l’un ni l’autre. Faut faire un cas par cas. Je te donne quelques exemples :

  1. Liste des projets -> * from projects
  2. Liste des fichiers d’un projet -> * from fichiers where project_id = x
  3. Liste des projets ET leurs fichiers -> * from projects as p join fichiers as f on f.project_id = p.id where project_id = x

Dans tous les cas, évite de charger ligne par ligne avec une requête par ligne.

Vous aimez le frontend ? Il y a un tas de petites tâches faciles si vous voulez contribuer à ZdS : https://github.com/zestedesavoir/zds-site/issues?q=is%3Aissue+is%3Aopen+label%3AC-Front

+3 -0

Pour compléter la réponse de @victor, pareil pour les requêtes à opérations cartésiennes, ça:

1
* from projects as p, fichiers as f where f.project_id = p.id

Tu va avoir un total de size(projects) * size(f) là où tu n’aurai que peu de résultats. Bref, la 3e méthode est la seule recommandée lorsque tu récupère et rejoins des valeurs de deux tables différentes.

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte