Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

A pesquisa CHARINDEX vs LIKE oferece um desempenho muito diferente, por quê?


Vou responder minha própria pergunta, pois foi difícil encontrar a resposta correta e fui apontado para o problema pela saída do SQL Server 2012 Execution Plan. Como você vê na pergunta original - tudo parece bem na superfície. Este é o SQL Server 2008.

Quando executo a mesma consulta em 2012, recebi um aviso em CHARINDEX consulta. O problema é - o SQL Server teve que fazer a conversão de tipo. Address1 é VarChar e a consulta tem N'1124' que é Unicode ou NVarChar . Se eu alterar esta consulta assim:
SELECT * 
FROM LOCAddress 
WHERE (CAST(CHARINDEX(LOWER('1124'), LOWER([Address1])) AS int)) 

Em seguida, ele é executado da mesma forma que LIKE consulta. Portanto, a conversão de tipo causada pelo gerador do Entity Framework estava causando esse impacto horrível no desempenho.