Odpovím na svou vlastní otázku, protože bylo těžké najít správnou odpověď a na problém mě upozornil výstup SQL Server 2012 Execution Plan. Jak vidíte v původní otázce - na povrchu vše vypadá OK. Toto je SQL Server 2008.
Když spustím stejný dotaz v roce 2012, dostal jsem varování na CHARINDEX
dotaz. Problém je - SQL Server musel provést konverzi typu. Address1
je VarChar
a dotaz má N'1124', což je Unicode nebo NVarChar
. Pokud tento dotaz změním takto:
SELECT *
FROM LOCAddress
WHERE (CAST(CHARINDEX(LOWER('1124'), LOWER([Address1])) AS int))
Poté běží stejně jako LIKE
dotaz. Konverze typů způsobená generátorem Entity Framework tedy způsobila tento hrozný zásah do výkonu.