sql >> Database teknologi >  >> RDS >> Sqlserver

CHARINDEX vs LIKE-søgning giver meget forskellig ydeevne, hvorfor?

Jeg vil besvare mit eget spørgsmål, da det var svært at finde det rigtige svar, og jeg blev peget på problemet af SQL Server 2012 Execution Plan output. Som du ser i det originale spørgsmål - alt ser OK ud på overfladen. Dette er SQL Server 2008.

Da jeg kører samme forespørgsel i 2012, fik jeg en advarsel på CHARINDEX forespørgsel. Problemet er - SQL Server skulle udføre typekonvertering. Address1 er VarChar og forespørgslen har N'1124', som er Unicode eller NVarChar . Hvis jeg ændrer denne forespørgsel som sådan:

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

Det kører derefter det samme som LIKE forespørgsel. Så typekonvertering, der var forårsaget af Entity Framework-generator, forårsagede dette forfærdelige hit i ydeevnen.



  1. @@IDENTITY, SCOPE_IDENTITY(), OUTPUT og andre metoder til at hente sidste identitet

  2. Betinget WHERE-klausul med CASE-sætning i Oracle

  3. Konverter 'datetime2' til 'date' i SQL Server (T-SQL-eksempler)

  4. 4 måder at finde rækker, der indeholder store bogstaver i PostgreSQL