Actuellement, j'utilise beaucoup de joints intérieurs (environ 7) dans mon SP, a-t-il un impact sur la performance SP. Est-ce que la jointure extérieure gauche donne une meilleure performance puis une jointure intérieure. p>
Une dernière chose si je suis rejoindre deux tables A et B qui a une carte d'identité de colonne et ID1, les deux r non nullables. Je suppose ici que je peux aller pour rejoindre interne comme ces colonnes r indexées. P>
6 Réponses :
Tout d'abord, ces deux sont destinés à servir à des fins différentes. La comparaison pourrait donc ne pas être valide dans tous les cas. P>
Vous pouvez lire plus ici. P>
Les jointures extérieures sont plus chères que les jointures intérieures. Ce que je suis sur le point de dire, cela va être controversé à beaucoup. Si vous ajustez la base de données à droite et si vous ne faites rien de goofy et si vous utilisez une force de force professionnelle, 7 jointures intérieures ne devraient pas être un problème. P>
Qu'est-ce que je veux dire par le réglage de la base de données? Il y a beaucoup au réglage de la base de données, mais la chose la plus évidente à vérifier est de vous assurer que vous vous joignez toujours sur des colonnes indexées. p>
Qu'est-ce que je veux dire par Goofy? N'utilisez pas l'opérateur ou l'opérateur dans votre condition de jointure. Essayez de garder vos jointures sur une seule comparaison comme une clé étrangère dans une table égal à la clé primaire de l'autre table. Essayez de garder tous vos champs clés tapés comme des entiers. P>
Si vous rencontrez des problèmes de performances, assurez-vous d'étudier le plan d'exécution de la requête incriminée. Par exemple, vous risquez de rencontrer des problèmes lors de la jointure sur des tables vraiment grandes, si grande que même une analyse d'index est trop lente. Vous devrez peut-être vous désormer et fournir un filtrage supplémentaire pour réduire les temps de numérisation. N'essayez pas d'anticiper cela. La dénormalisation est la mieux faite à peine et seulement après avoir rencontré des situations de performance du monde réelles. P>
Où était la partie controversée encore? Le nombre de jointures? Je pense que cela dépend seulement de quelles tables sont jointes. En outre, de bons conseils sur les clauses ou code>. Ils sont trompeusement chers, en particulier dans SQL Server.
J'ai travaillé avec des développeurs dans le passé qui croyait que vous ne devriez pas aller au-delà de trois jointures pour des raisons de performance. J'aurais accepté cela dans les années 1980 mais pas aujourd'hui.
JOIN est utilisé pour un but spécifique et non pour la performance. P>
La jointure extérieure gauche est utilisée pour inclure des enregistrements, pour lesquels il n'y a pas d'enregistrement correspondant dans le tableau à droite. Rejoindre interne choisit des enregistrements correspondants en fonction de certains critères, dans les tables. P>
Cette petite fridle à propos de la rejoignée extérieure gauche était super utile pour moi. La commutation vers une jointure extérieure à partir d'une jointure interne Coupez ma requête de 16 secondes à 50 ms. Je n'utilisais aucune des colonnes de la table jointe afin que cela puisse être joint après-le fait.
Les jointures de gauche donnent des résultats différents que les jointures intérieures et ne doivent donc pas être utilisées comme substitut. Plus que probablement, il est indexé que vous avez besoin. Bien que les index soient automatiquement créés lorsque vous définissez une clé primaire, elles ne sont pas créées lorsque vous définissez une clé étrangère. Donc, vous devrez indexer toutes ces clés précédentes dans vos jointures si vous ne l'avez pas déjà fait. P>
Vérifiez également votre plan d'exécution pour voir où se trouve le problème. p>
Pour des conseils plus spécifiques sur les moyens d'accorder votre requête, vous devez nous le montrer. p>
La raison pour laquelle les jointures sont généralement chères sont que la jonction peut entraîner un certain nombre de tuples supérieurs à la taille de l'une ou l'autre table. P>
Cependant, parfois, les attributs de jointure d'une table déterminent fonctionnellement un tuple unique dans une autre table. Dans ce cas, la jointure peut être très bon marché (mais vous devrez indexer ces attributs). p>
Ce serait une opération bon marché quel que soit le nombre de jointures que vous avez fait - c'est plus une question des données et des dépendances de données. p>
Puisque vous vous joignez sur 2 clés, où il semble que la même clé est utilisée pour les deux tables, cela devrait être une opération bon marché quel que soit le type de jointure que vous utilisez. P>
Avez-vous des index sur les colonnes utilisées pour la condition de jointure (ainsi que toute colonne utilisée pour une autre condition, comme dans la clause WHERE)? Il peut vraiment i> aide. En règle générale, j'ai entendu intérieure pour la performance que gauche - mais ce qui devrait être utilisé dépend de ce que vous voulez obtenir ^^