168 votes

Les jointures sont pour les gens paresseux ?

J’ai récemment eu une discussion avec un autre développeur qui m’a prétendu que les jointures (SQL) sont inutiles. C’est techniquement vrai, mais il a ajouté que l’utilisation de jointures est moins efficace que de faire plusieurs requêtes et tables de lien dans le code (c# ou Java).

Pour lui les jointures sont pour les gens paresseux qui ne se soucient performance. Est-ce vrai ? Devrions nous évitons d’utiliser des jointures ?

188voto

Michael Borgwardt Points 181658

Non, on devrait éviter les développeurs qui détiennent de tels incroyablement mauvais avis.

Dans de nombreux cas, une base de données de jointure est de plusieurs ordres de grandeur plus rapide que tout ce fait via le client, car elle évite de DB allers-retours, et la base de données peuvent utiliser les index pour effectuer la jointure.

Sur le dessus de ma tête, je ne peux même pas imaginer un scénario où un utilisée correctement rejoindre serait plus lent que l'équivalent côté client de l'opération.

Edit: Il y a quelques rares cas où un client personnalisé code peut faire les choses plus efficacement qu'un simple DB rejoindre (voir le commentaire de meriton). Mais c'est très exceptionnel.

83voto

Marc Gravell Points 482669

Il me semble que votre collègue pourrait bien faire avec un no-sql document-ou de base de données clé-valeur à stocker. Qui sont eux-mêmes de très bons outils et une bonne solution pour de nombreux problèmes.

Cependant, un relationnel de la base de données est fortement optimisé pour travailler avec des ensembles. Il y a beaucoup, beaucoup de manières d'interroger la base de données sur les jointures qui sont largement plus efficace que beaucoup d'allers-retours. C'est là que la polyvalence qui répond d'un sgbd. Vous pouvez obtenir le même dans un nosql store, mais vous finissent souvent par la construction d'une structure distincte adaptée pour chaque nature de la requête.

En bref: je suis en désaccord. Dans un SGBDR, les jointures sont fondamentaux. Si vous ne l'utilisez pas, vous ne l'utilisez pas comme un SGBDR.

46voto

sehe Points 123151

Eh bien, il ne va pas dans le cas général.

Bases de données sont en mesure d’optimiser l’utilisation de diverses méthodes, aidé par des indicateurs d’optimiseur, index des tables, des relations de clé étrangère et éventuellement d’autres informations spécifiques de fournisseur de base de données.

24voto

richzilla Points 3851

Non, vous ne devriez pas.

Les bases de données sont spécifiquement conçus pour manipuler des ensembles de données (évidemment....). Par conséquent, ils sont incroyablement efficace dans ce domaine. En faisant ce qui est essentiellement un manuel de joindre à son propre code, il est tentant de prendre la place de quelque chose de spécifiquement conçu pour le travail. Les chances de son code jamais être aussi efficace que dans la base de données sont très éloignées.

En aparté, sans jointures, quel est le point en utilisant une base de données? il peut tout aussi bien utiliser des fichiers texte.

19voto

MJB Points 5105

Si « paresseux » est défini comme ceux qui ont envie d’écrire moins de code, puis je suis d’accord. Si « paresseux » est défini comme les gens qui veulent avoir les outils à faire ce qu’ils sont bons à faire, je suis d’accord. Donc si il est simplement d’accord avec Larry Wall (en ce qui concerne les attributs de bons programmeurs), puis je suis d’accord avec lui.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X