Je maintiens de quelqu'un d'autre SQL pour le moment, et je suis tombé sur ceci dans une procédure stockée:Y a-t-il une différence de performance ou de fonctionnalité entre ces deux instructions SQL?
SELECT
Location.ID,
Location.Location,
COUNT(Person.ID) As CountAdultMales
FROM
Transactions INNER JOIN
Location ON Transactions.FKLocationID = Location.ID INNER JOIN
Person ON Transactions.FKPersonID = Person.ID
AND DATEDIFF(YEAR, Person.DateOfBirth, GETDATE()) >= 18 AND Person.Gender = 1
WHERE
((Transactions.Deleted = 0) AND
(Person.Deleted = 0) AND
(Location.Deleted = 0))
est-il une différence entre ce qui précède et ce (ce qui est la façon dont je l'écrire)
SELECT
Location.ID,
Location.Location,
COUNT(Person.ID) As CountAdultMales
FROM
Transactions INNER JOIN
Location ON Transactions.FKLocationID = Location.ID INNER JOIN
Person ON Transactions.FKPersonID = Person.ID
WHERE
((Transactions.Deleted = 0) AND
(Person.Deleted = 0) AND
(Location.Deleted = 0) AND
(DATEDIFF(YEAR, Person.DateOfBirth, GETDATE()) >= 18) AND
(Person.Gender = 1))
Personnellement, je trouve mettre les conditions de la clause WHERE plus lisible, mais je me demandais s'il y avait des performances ou d'autres raisons de « conditionalise » (s'il y a un tel mot) la REJOIGNEZ
Merci
Sur mon SQL Server 2008R2, les plans d'exécution générés sont identiques. – jpw
Ne pas oublier d'accepter les réponses, également sur vos autres questions –
Je vais, t-clausen.dk, lorsque les questions sont traitées! – Edwardo