Ich werde meine eigene Frage beantworten, da es schwierig war, die richtige Antwort zu finden, und ich durch die Ausgabe des Ausführungsplans von SQL Server 2012 auf das Problem hingewiesen wurde. Wie Sie in der ursprünglichen Frage sehen, sieht an der Oberfläche alles in Ordnung aus. Dies ist SQL Server 2008.
Wenn ich dieselbe Abfrage auf 2012 ausführe, wurde ich auf CHARINDEX
gewarnt Anfrage. Das Problem ist - SQL Server musste eine Typkonvertierung durchführen. Address1
ist VarChar
und die Abfrage hat N'1124', was Unicode oder NVarChar
ist . Wenn ich diese Abfrage so ändere:
SELECT *
FROM LOCAddress
WHERE (CAST(CHARINDEX(LOWER('1124'), LOWER([Address1])) AS int))
Es läuft dann genauso ab wie LIKE
Anfrage. Die vom Entity Framework-Generator verursachte Typkonvertierung verursachte also diesen schrecklichen Leistungseinbruch.