sql >> Databasteknik >  >> RDS >> Sqlserver

CHARINDEX vs LIKE-sökning ger väldigt olika prestanda, varför?

Jag kommer att svara på min egen fråga eftersom det var svårt att hitta rätt svar och jag pekade på problemet av SQL Server 2012 Execution Plan output. Som du ser i den ursprungliga frågan - allt ser OK ut på ytan. Det här är SQL Server 2008.

När jag kör samma fråga 2012 fick jag en varning på CHARINDEX fråga. Problemet är - SQL Server var tvungen att göra typkonvertering. Address1 är VarChar och frågan har N'1124' som är Unicode eller NVarChar . Om jag ändrar denna fråga som så:

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

Den körs sedan på samma sätt som LIKE fråga. Så typkonvertering som orsakades av Entity Framework-generatorn orsakade denna hemska prestandaträff.



  1. Sammanfoga/vrid föremål med EAV-tabell

  2. Tidsstämpel med en millisekunds precision:Hur man sparar dem i MySQL

  3. Konvertera rekursiv funktion till visning

  4. ORA-28001:Lösenordet har upphört att gälla