Je vais répondre à ma propre question car il était difficile de trouver la bonne réponse et le problème m'a été signalé par la sortie du plan d'exécution de SQL Server 2012. Comme vous le voyez dans la question initiale - tout semble OK en surface. C'est SQL Server 2008.
Lorsque j'exécute la même requête en 2012, j'ai reçu un avertissement sur CHARINDEX
requête. Le problème est que SQL Server a dû effectuer une conversion de type. Address1
est VarChar
et la requête a N'1124' qui est Unicode ou NVarChar
. Si je modifie cette requête comme suit :
SELECT *
FROM LOCAddress
WHERE (CAST(CHARINDEX(LOWER('1124'), LOWER([Address1])) AS int))
Il s'exécute alors de la même manière que LIKE
requête. Ainsi, la conversion de type causée par le générateur Entity Framework provoquait cet horrible coup de performance.