Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

La recherche CHARINDEX vs LIKE donne des performances très différentes, pourquoi ?

Je vais répondre à ma propre question car il était difficile de trouver la bonne réponse et le problème m'a été signalé par la sortie du plan d'exécution de SQL Server 2012. Comme vous le voyez dans la question initiale - tout semble OK en surface. C'est SQL Server 2008.

Lorsque j'exécute la même requête en 2012, j'ai reçu un avertissement sur CHARINDEX requête. Le problème est que SQL Server a dû effectuer une conversion de type. Address1 est VarChar et la requête a N'1124' qui est Unicode ou NVarChar . Si je modifie cette requête comme suit :

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

Il s'exécute alors de la même manière que LIKE requête. Ainsi, la conversion de type causée par le générateur Entity Framework provoquait cet horrible coup de performance.