3 votes

Sous-requête dans l'instruction SELECT et jointures

J'ai de très grandes tables et les requêtes existantes ont de longues sous-requêtes utilisées dans l'instruction SELECT. Les performances seront-elles les mêmes si les sous-requêtes sont converties en JOINs ?

En quoi les requêtes ci-dessous sont-elles différentes en termes de performances ?

SELECT
e.employee_id,
(
  SELECT department_name
  FROM Department
  WHERE employee_id = e.employee_id) Department_Name
FROM Employee e

Vs

SELECT
e.employee_id,
d.department_name Department_Name
FROM Employee e
JOIN Department d
ON d.employee_id = e.employee_id

4voto

Dipak Delvadiya Points 2358

Pour autant que je sache, la deuxième option serait meilleure que la première parce que la première option contient la sous-requête. Normalement, dans l'exécution d'une déclaration SQL, les jointures sont plus rapides que les sous-requêtes internes. Vous pouvez vous aider du plan d'exécution qui est généré par le serveur SQL. Peu importe la façon dont vous écrivez votre requête, SQL Server la transformera toujours en un plan d'exécution. Ce serait une façon intelligente de générer le plan d'exécution pour les deux requêtes, vous obtiendrez certainement le résultat de performance.

Pour plus d'informations, vous pouvez consulter le lien ci-dessous.

  1. https://blog.sqlauthority.com/2010/06/06/sql-server-subquery-or-join-various-options-sql-server-engine-knows-the-best/

  2. http://www.sqlservice.se/sql-server-performance-death-by-correlated-subqueries/

0voto

Rajesh Bhat Points 596

Dans la plupart des scénarios, les tables JOIN avec des colonnes de jointure indexées offrent de meilleures performances que les sous-requêtes. Vérifiez le plan d'exécution estimé en sélectionnant les deux requêtes (sous-requête et JOIN) et vous pourrez voir la différence dans SSMS.

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