sql >> Database >  >> RDS >> Sqlserver

CHARINDEX vs LIKE zoeken geeft heel andere prestaties, waarom?

Ik zal mijn eigen vraag beantwoorden omdat het moeilijk was om het juiste antwoord te vinden en ik werd op het probleem gewezen door de uitvoer van het SQL Server 2012 Execution Plan. Zoals je ziet in de oorspronkelijke vraag - alles ziet er op het oppervlak goed uit. Dit is SQL Server 2008.

Toen ik dezelfde query uitvoerde in 2012 kreeg ik een waarschuwing op CHARINDEX vraag. Het probleem is - SQL Server moest typeconversie doen. Address1 is VarChar en de zoekopdracht heeft N'1124', wat Unicode of NVarChar is . Als ik deze zoekopdracht als volgt verander:

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

Het werkt dan hetzelfde als LIKE vraag. Dus typeconversie die werd veroorzaakt door de Entity Framework-generator veroorzaakte deze vreselijke prestatie.



  1. Database-ontwerp met Vertabelo

  2. MySQL unieke 1500 varchar veldfout (#1071 - Opgegeven sleutel was te lang)

  3. mysql database automatisch partitioneren

  4. Een sitemap maken met PHP en MySQL