sql >> Base de Datos >  >> RDS >> Sqlserver

La búsqueda CHARINDEX vs LIKE ofrece un rendimiento muy diferente, ¿por qué?

Responderé a mi propia pregunta, ya que fue difícil encontrar la respuesta correcta y la salida del Plan de ejecución de SQL Server 2012 me señaló el problema. Como puede ver en la pregunta original, todo se ve bien en la superficie. Este es SQL Server 2008.

Cuando ejecuté la misma consulta en 2012, recibí una advertencia en CHARINDEX consulta. El problema es que SQL Server tuvo que hacer una conversión de tipos. Address1 es VarChar y la consulta tiene N'1124' que es Unicode o NVarChar . Si cambio esta consulta así:

SELECT * 
FROM LOCAddress 
WHERE (CAST(CHARINDEX(LOWER('1124'), LOWER([Address1])) AS int)) 

Luego se ejecuta igual que LIKE consulta. Entonces, la conversión de tipo que fue causada por el generador de Entity Framework estaba causando este horrible golpe en el rendimiento.