Odpowiem na moje własne pytanie, ponieważ trudno było znaleźć poprawną odpowiedź, a problem został wskazany przez dane wyjściowe programu SQL Server 2012 Execution Plan. Jak widać w pierwotnym pytaniu - na powierzchni wszystko wygląda OK. To jest SQL Server 2008.
Gdy uruchamiam to samo zapytanie w 2012 r., otrzymuję ostrzeżenie dotyczące CHARINDEX
zapytanie. Problem polega na tym, że SQL Server musiał wykonać konwersję typów. Address1
to VarChar
a zapytanie ma N'1124', który jest Unicode lub NVarChar
. Jeśli zmienię to zapytanie w ten sposób:
SELECT *
FROM LOCAddress
WHERE (CAST(CHARINDEX(LOWER('1124'), LOWER([Address1])) AS int))
Następnie działa tak samo jak LIKE
zapytanie. Tak więc konwersja typu spowodowana przez generator Entity Framework powodowała ten straszny spadek wydajności.