J'ai une table, appelons-la History
. La clé primaire (aka Clustered Index) est appelée HIST_ID
. La table contient environ 2300 lignes dans la base de développement. Considérons maintenant les deux questions suivantes:Cas particulier avec SQL Server, indices et paramètres
Requête 1:
declare @x int
set @x = 14289
select * from History where [email protected]
Requête 2:
declare @x int
set @x = 14289
select * from History where [email protected] or @x is null
La seule différence est le or @x is null
à la fin. Cependant, la première requête recherche un index, le second - index scan. Ce qui donne?
La réponse préemptive - non, option (recompiler) n'aide pas.
Ajouté: Je voudrais des faits argumentés solides, pas des suppositions. Je peux deviner une douzaine de raisons possibles pour moi-même. Mais quel est le problème réel ici?
Ahem, regardez bien! Le "est nul" est fait contre @x, pas la table! C'est une expression FAUX constante! –
La deuxième instruction SELECT dans son union ** retournera ** toujours un ensemble vide. La valeur de @x est 14289, pas null. –
Le support a été ajouté après la publication de la mise à jour cumulative 5. Si vous obtenez la dernière mise à jour, cela fonctionne comme annoncé. – NotMe