Je suis curieux de savoir laquelle des propositions suivantes serait la plus efficace ?
J'ai toujours été un peu prudent sur le fait d'utiliser IN
parce que je crois que SQL Server transforme l'ensemble des résultats en un gros IF
déclaration. Pour un grand ensemble de résultats, cela pourrait entraîner des performances médiocres. Pour les petits ensembles de résultats, je ne suis pas sûr que l'un ou l'autre soit préférable. Pour les grands ensembles de résultats, est-ce que EXISTS
être plus efficace ?
WHERE EXISTS (SELECT * FROM Base WHERE bx.BoxID = Base.BoxID AND [Rank] = 2)
vs.
WHERE bx.BoxID IN (SELECT BoxID FROM Base WHERE [Rank = 2])
9 votes
La meilleure façon de le savoir est de l'essayer et de faire quelques mesures.
11 votes
Il y a obtenu Il doit y avoir des milliards de copies de ce site .......
0 votes
@marc_s : oui, mais je pense que cela dépend vraiment du cas. Je suppose que la réponse canonique est celle de Klausbyskov (ou de quiconque peut revendiquer l'art antérieur).
7 votes
Pour info, si vous voulez le le plus de manière performante, vous pouvez
select 1 from Base...
dans votrewhere exists
puisque vous ne vous souciez pas vraiment des résultats, juste du fait qu'une ligne existe réellement.1 votes
@brad Pas vraiment. Le compilateur ne tiendra pas compte de tout ce qui se trouve entre les balises
select
et lefrom
(sauf si vous y ajoutez une autre sous-requête ou quelque chose de similaire... étrange). IMO, la syntaxe aurait dû êtresemi join table2 on ....
.